本帖最后由 林太太 于 2024-9-29 17:29 编辑
这一期Follow Me活动选的开发板是Arduino UNO R4 WiFi,Arduino十年磨一剑的产品,发布不久,第一时间做活动给大家体验。我在本次活动中主要使用了两块开发板,一块自然是Arduino UNO R4 WiFi,而另一块是Raspberry Pi Zero2 W,作为Home Assistant服务端来使用。
由于活动中有多个任务需要完成,因此我使用时间控制的方式,在代码中逐一完成任务。
入门任务:搭建环境并开启第一步Blink / 串口打印Hello EEWorld!
使用时间循环的方式,闪烁板载Led灯,并在灯每次闪烁完成后,在串口中打印Hello EEWorld!
- void task1() {
- unsigned long start_time = millis();
- while (millis() - start_time < 20000) {
- digitalWrite(LED_BUILTIN, HIGH);
- delay(1000);
- digitalWrite(LED_BUILTIN, LOW);
- delay(1000);
- Serial.println("Hello, EEWorld!");
- }
- }
基础任务:驱动12x8点阵LED;用DAC生成正弦波;用OPAMP放大DAC信号;用ADC采集并且打印数据到串口等其他接口可上传到上位机显示曲线
LED矩阵使用起来非常方便,只需要在程序中定义出一个矩阵来,矩阵的形状和板子上的实际矩阵一致。接下来只需要把想要点亮的led标记为1就可以。
- byte frame[8][12] = {
- { 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0 },
- { 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0 },
- { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
- { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
- { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
- };
循环里,只需要不停的把A3,也就是运算放大器输出引脚的数据在串口中打印出来就可以。
- void task2() {
- unsigned long start_time = millis();
- while (millis() - start_time < 20000) {
- Serial.println(analogRead(A3));
- }
- }
运放连线我使用的是电压跟随器的方式,也就是只需要短路A0,A1,以及A2,A3就可以。A0是DAC输出的正弦波, 从A1运放的正向输入端输入;反相输入端A2与输出A3短接,形成电压跟随器。
进阶任务+扩展任务二:通过Wi-Fi,利用MQTT协议接入到开源的智能家居平台HA(HomeAssistant);通过外部SHT40温湿度传感器,上传温湿度到HA,通过HA面板显示数据
在这个任务中,要使用几个第三方库,需要自行去库管理器里安装。
- #include <ArduinoHA.h>
- #include <ArduinoJson.h>
- #include <Adafruit_SHT4x.h>
首先要创建一些实例,然后初始化。
- WiFiClient client;
- HADevice device(MQTT_ID);
- HAMqtt mqtt(client, device);
- HASensorNumber tmpt("uno_r4_tmpt");
- HASensorNumber hmdt("uno_r4_hmdt");
- Adafruit_SHT4x sht4 = Adafruit_SHT4x();
- void wifi_init() {
- if (WiFi.status() == WL_NO_MODULE) {
- Serial.println("Communication with WiFi module failed!");
- while (true) {}
- }
-
- if (WiFi.firmwareVersion() < WIFI_FIRMWARE_LATEST_VERSION) {
- Serial.println("Please upgrade the firmware");
- }
-
-
-
- WiFi.begin(WIFI_UUID, WIFI_PWD);
- while (WiFi.status() != WL_CONNECTED) {
- delay(1000);
- Serial.print(".");
- }
- Serial.println("\nWiFi Connected!");
-
- }
接着循环里把传感器获取到的数据发布出去就可以了。
- void task_last() {
- static unsigned long last_time;
- if (millis() - last_time > 1000) {
- last_time = millis();
- sensors_event_t humidity, temp;
- sht4.getEvent(&humidity, &temp);
- tmpt.setValue(temp.temperature);
- hmdt.setValue(humidity.relative_humidity);
- }
- }
到此为止仅完成了Arduino部分的代码。不要忘记还有一个树莓派,Home Assistant的服务器需要搭建在上面。
先下载树莓派官方的Imager工具。
下面图片使用了官方的动图,因此我们需要根据实际情况做一些调整,比如要把设备选择成Raspberry Pi Zero2W。接着按照下图选择Home Assistant固件,然后选好目标TF卡后,直接烧录。

烧录完成后,把TF卡插入树莓派。
上电后,进入HA的管理界面,在ADD-ON STORE里添加Mosquitto broker。接着在Devices & Services里面添加MQTT,填入本机IP,就完成了全部配置。
先给Arduino接好线,SCL 和SDA对应连接。
然后给Arduino上电,再打开HA面板,就可以看到传感器数据。
至此,所有任务就全部完成了。
这一期Follow Me活动选的开发板是Arduino UNO R4 WiFi,Arduino十年磨一剑的产品,发布不久,第一时间做活动给大家体验。非常好玩。希望往后的活动也能多有这样趣味性比较高,但难度较低的开发板,让大家学习体验。
项目下载:
https://download.eeworld.com.cn/detail/%E6%9E%97%E5%A4%AA%E5%A4%AA/634527
|