426|0

5

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第2期】任务提交 [复制链接]

  本帖最后由 林太太 于 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");
  • }
  • // Serial.print("Attempting to connect to Network named: ");
  • // Serial.println(WIFI_UUID);
  • WiFi.begin(WIFI_UUID, WIFI_PWD);
  • while (WiFi.status() != WL_CONNECTED) {
  • delay(1000);
  • Serial.print(".");
  • }
  • Serial.println("\nWiFi Connected!");
  • // Serial.println(WiFi.localIP());
  • }

接着循环里把传感器获取到的数据发布出去就可以了。

  • 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卡后,直接烧录。

Choose the operating system

烧录完成后,把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

点赞(1) 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 2/10 下一条
有奖直播 | TI 助力机器人电机控制系统设计
直播时间:2月27日(周四)上午10:00
活动奖励:家具壶、保温杯、充电线

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表