本帖最后由 JectXie 于 2024-11-1 13:20 编辑
2024-9-29 19:29 上传
主控:这次用到的是Arduino UNo R4 WIFI这款板子,高级货,联网模组是ESP32-S3 MINI,我后面才知道正常板子是邮票孔,这个MINI的pin在这块PCB的底部,芯片强悍,但是也确实不好拆,得用加热台才拆得下来。我觉得他选用Mini应该也有防止普通开发者会把他拆下来。毕竟这个ESP32-S3 确实强很多。
传感器:LTR-329是一个光感模块,可以把光的流明以数字形式展示。
传感器:SHT40 这是一个温湿度传感器,是SHT30的升级款。具体参数还需要未来有项目使用到的时候再来对比。
3、完成任务历程
3.1 搭建环境并开启第一步Blink / 串口打印Hello EEWorld!
3.1.1 下载Arduino IDE,
3.1.2 安装开发板、
3.1.3 将开发板插入电脑USB接口、查看电脑识别出来的串口号是多少、
3.1.4 在IDE中设置好串口、完成烧录(后续任务会重复很多遍烧录过程,后面不再介绍烧录流程)
流程图
3.2 驱动12x8点阵LED;用DAC生成正弦波;用OPAMP放大DAC信号;用ADC采集并且打印数据到串口等其他接口可上传到上位机显示曲线
3.2.1 学习UNO4 WIFI开发板对于11个IO控制96个灯的设计思路、
3.2.2 学习DAC、ADC相关基础知识
3.2.3 学习OPAMP相关原理知识
3.2.4 学习使用IDE 串口展示曲线功能
1、驱动12x8点阵LED流程图 2、用DAC生成正弦波流程图 3、用OPAMP放大DAC信号流程图
4、用ADC采集并且打印数据到串口等其他接口可上传到上位机显示曲线流程图
3.3 通过Wi-Fi,利用MQTT协议接入到开源的智能家居平台HA(HomeAssistant)
3.3.1 连接WIFI
3.3.2 安装MQTT服务
3.3.3 安装HA
3.3.4 学习设备接入HA的MQTT配置指令
3.4 通过外部LTR-329 环境光传感器,上传光照度到HA,通过HA面板显示数据
3.4.1 使用官方库读取流明数值
3.4.2 串口打印数值
3.4.3 数据接入HA,发布流明数据,HA面板显示
3.5 通过外部SHT40温湿度传感器,上传温湿度到HA,通过HA面板显示数据
3.5.1 使用官方库读取温湿度
3.5.2 串口打印数值
3.5.3 数据接入HA,分别发布温度和湿度数据,HA面板显示
4、完整任务的视频介绍
5、任务过程发帖记录
5.1 开发环境搭建 https://bbs.eeworld.com.cn/thread-1291460-1-1.html
5.2 驱动 12*8 点阵屏 https://bbs.eeworld.com.cn/thread-1292150-1-1.html
5.3 用DAC生成正弦波 https://bbs.eeworld.com.cn/thread-1292151-1-1.html
5.4 用OPAMP放大DAC信号 https://bbs.eeworld.com.cn/thread-1292152-1-1.html
5.5 ADC采集并将数据打印到上位机 https://bbs.eeworld.com.cn/thread-1291640-1-1.html
5.6 开发板使用MQTT接入HA https://bbs.eeworld.com.cn/thread-1292197-1-1.html
5.7 读取LTR-329传感器数据接入HA,并在HA面板展示数据 https://bbs.eeworld.com.cn/thread-1292368-1-1.html
5.8 读取SHT40传感器数据接入HA,并在HA面板展示数据 https://bbs.eeworld.com.cn/thread-1292361-1-1.html
6、各任务详细说明
6.1 入门任务(必做):搭建环境并开启第一步Blink / 串口打印Hello EEWorld!
6.1.1 任务简介
这一部分主要学习了如何搭建Arduino 开发环境,如何串口打印响应数据,这是学习任何Arduio 开发板的第一步。
6.1.2代码片段
- void setup() {
- Serial.begin(115200);
-
- pinMode(LED_BUILTIN, OUTPUT);
- }
-
-
- void loop() {
- digitalWrite(LED_BUILTIN, HIGH);
- delay(1000);
- digitalWrite(LED_BUILTIN, LOW);
- delay(1000);
- Serial.println("Hello EEWorld!");
- }
-
6.1.3 效果图
6.1.4 帖子链接
https://bbs.eeworld.com.cn/thread-1291460-1-1.html
6.2 基础任务(必做):驱动12x8点阵LED;用DAC生成正弦波;用OPAMP放大DAC信号;用ADC采集并且打印数据到串口等其他接口可上传到上位机显示曲线
6.2.1 任务简介
说是一个任务,实际里面是4个任务,任务2和3对新手不友好。但是可以学到新知识,很好。相信出题的老师很用心的出的这四题。
6.2.2 代码片段
驱动12x8点阵LED代码
- #include "ArduinoGraphics.h"
- #include "Arduino_LED_Matrix.h"
-
- ArduinoLEDMatrix matrix;
-
- int scrollSpeed = 200;
- void setup() {
- Serial.begin(115200);
- matrix.begin();
-
- matrix.beginDraw();
- matrix.stroke(0xFFFFFFFF);
- matrix.textFont(Font_4x6);
- matrix.beginText(0, 1, 0xFFFFFF);
-
- scrollText("WAIT RECEIVE DATA . . .");
- Serial.println("WAIT RECEIVE DATA . . .");
- matrix.endText();
- matrix.endDraw();
- }
-
- void loop() {
- if (Serial.available() > 0) {
- String inputData = Serial.readString();
-
- Serial.println(inputData);
-
- matrix.clear();
-
- scrollText(inputData);
-
- delay(100);
- }
- }
-
- void scrollText(const String& text) {
- int textWidth = text.length() * 6;
- int matrixWidth = matrix.width();
-
- for (int x = matrixWidth; x >= -textWidth; x--) {
- matrix.beginDraw();
- matrix.stroke(0xFFFFFFFF);
- matrix.textFont(Font_5x7);
- matrix.beginText(x, 1, 0xFFFFFF);
- matrix.println(text);
- matrix.endText();
- matrix.endDraw();
- delay(scrollSpeed);
- }
- }
-
用DAC生成正弦波代码
- #include <Arduino.h>
- #include <math.h>
-
- #define DAC_PIN A0
-
- void setup() {
- pinMode(DAC_PIN, OUTPUT);
- }
-
- void loop() {
- for(int i = 0; i < 360; i++){
- float rad = i * PI / 180.0;
- int outputValue = 127 + 127 * sin(rad);
- analogWrite(DAC_PIN, outputValue);
- delay(10);
- }
- }
-
用OPAMP放大DAC信号代码
- #include <OPAMP.h>
-
- void setup () {
- OPAMP.begin(OPAMP_SPEED_HIGHSPEED);
- }
-
- void loop() {}
-
用ADC采集并且打印数据到串口等其他接口可上传到上位机显示曲线代码
-
- const int analogPin = A0;
-
- void setup() {
-
- Serial.begin(9600);
- }
-
- void loop() {
-
- int sensorValue = analogRead(analogPin);
-
-
-
- Serial.println(sensorValue);
-
-
- delay(100);
- }
-
-
6.2.3 效果图
2、 
3、 
4、 
6.2.4 帖子链接
6.3 通过Wi-Fi,利用MQTT协议接入到开源的智能家居平台HA(HomeAssistant)
6.3.1 任务简介
这个任务主要学习了如果使用HA,HA设备如何接入,因为实验中使用了群晖NAS的Docker,存在一定的缺陷,所以导致只有一种设备接入配置的方式(发送配置的MQTT指令),实际上还可以修改配置文件来达到添加设备的目的。
6.3.2 代码片段
- #include <WiFi.h>
- char ssid[] = "CMCC-NxAn";
- char pass[] = "mhcsm2m4";
-
- void setup() {
- Serial.begin(9600);
- while (!Serial) {
- ;
- }
-
- Serial.print("Attempting to connect to WPA SSID: ");
- Serial.println(ssid);
- while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
-
- Serial.print(".");
- delay(5000);
- }
- Serial.println("\nYou're connected to the network");
- Serial.print("IP Address: ");
- Serial.println(WiFi.localIP());
- Serial.print("Gateway IP: ");
- Serial.println(WiFi.gatewayIP());
- Serial.print("Subnet Mask: ");
- Serial.println(WiFi.subnetMask());
- Serial.println();
- }
- void loop() {
- Serial.print("IP Address: ");
- Serial.println(WiFi.localIP());
- delay(1000);
- }
-
6.3.3 效果图
6.3.4 帖子链接
6.4 通过外部LTR-329 环境光传感器,上传光照度到HA,通过HA面板显示数据
6.4.1 任务简介
首先给Arduino 连接wifi、读取光照数据,显示光照数据。这个任务难度就比较友好,不过可以学习的地方有很多,可以深入了解MQTT协议。
6.4.2 代码片段
6.4.3 效果图
6.4.4 帖子链接
6.5 通过外部SHT40温湿度传感器,上传温湿度到HA,通过HA面板显示数据
6.5.1 任务简介
这个任务的流程与上一个一模一样,差别在于不同的外设,任务难度比较友好,SHT40是SHT30的升级款,Ada封装的库,更方便开发者应用与集成功能。
6.5.2 代码片段
6.5.3 效果图
6.5.4 帖子链接
7、代码合计
整个任务所有代码合计
8、本次活动心得体会(写在最后)
通过这次Followme的活动,很开心可以顺利的完成,这次活动对于我个人自身,自己的代码水平也在一定程度上有提升,从以前每次点完编译不知道对错,到这一次很轻松的完成这些代码。对Arduino也有更深入的理解,对Adafruit系列的传感器也理解的更多。对HA也有更深入的理解与学习,这与在申请这个项目时写的目的已基本达到。
这次使用到了示波器,学会了如何使用,对今后的开发应该会更进一步。
对于本次的活动建议,我觉得官方虽然已经做了很大的努力为申请的用户提供完成任务的便利,但是如果可以在一个特定区域指出出题的目的,可能可以让学习者更好的理解出题人的用意。这应该属于良性发展的一条途径,中间例如ADC、DAC这种专业词汇以及用法,对于非科班出身真的很陌生,也有一丝丝的迷茫。虽然最后都完成了。但是学习过程中也确实有些坎坷。
|