239|0

11

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二期】任务汇总帖 [复制链接]

  本帖最后由 Aclicee 于 2024-11-16 14:26 编辑

        大家好,我是Aclicee,很高兴能够参加EEworld和DigiKey的Follow me活动。今天向各位老师报告一下本期活动的任务汇总。在本期活动中,我们物料清单是:

        Arduino UNO R4 WiFi、LTR329环境光传感器、SHT40温湿度传感器以及一条Qwiic缆线

项目简介:

        本次活动主要围绕Arduino UNO R4 WiFi开发板进行学习和实践。项目涉及了开发环境的搭建、基础编程任务(如LED点亮、串口打印、驱动点阵LED、DAC生成正弦波、OPAMP放大DAC信号、ADC采样上传上位机显示),以及进阶任务(如Arduino Wifi连接并通过MQTT协议接入HomeAssistant平台)。此外,还包括了扩展任务,即多模态传感器(LTR-329环境光传感器和SHT40温湿度传感器)的使用并上传数据到HomeAssistant平台。

 

1. 入门任务:开发环境搭建

        【【Follow me第二期】入门任务 - 开发环境配置+LED点亮+串口打印+LED点阵驱动 - DigiKey得捷技术专区 - 电子工程世界-论坛 (eeworld.com.cn)

        我们可以选择使用在线编辑器或者本地的IDE来编译和上传Arduino的代码。打开Arduino的官方网站就可以看到对应的使用方式。这里以使用在线的编辑器Arduino Cloud Editor为例,我们打开编辑器的网站,根据指示安装一个Arduino Cloud Agent插件,即可使用在线编辑器。与我们之前使用的一些单片机开发环境相比,Arduino的配置过程显得尤为简单直观。完成环境配置后,将Arduino开发板通过USB线连接至电脑,即可开始编写代码并进行烧录。

 

2. 入门任务:LED点亮以及串口打印

        【【Follow me第二期】入门任务 - 开发环境配置+LED点亮+串口打印+LED点阵驱动 - DigiKey得捷技术专区 - 电子工程世界-论坛 (eeworld.com.cn)

        我们点击Create Sketch来编写第一个Arduino程序,可以看到我们的开发板可以被编辑器自动识别。我们打开官方提供的例程库,可以看到点亮LED的示例代码。不难发现,Arduino程序主要由两个部分组成:setup()和loop()。setup()函数负责初始化设置,如配置管脚模式和初始化外设,它仅在程序开始时执行一次。随后,程序将进入loop()函数,这是程序的主循环,所有持续执行的任务都在这里进行。

        设计思路:在“Blink”例程中,我们首先将LED对应的管脚设置为输出模式。这样,我们就可以通过改变该管脚的电平状态(高电平或低电平),来控制LED的点亮与熄灭。在loop()函数中,我们通过编写代码,使LED以一定的频率闪烁。

        将上述代码复制到我们的工程中,并烧录到Arduino开发板上。烧录过程中,开发板上的两盏LED指示灯会短暂点亮,以指示烧录过程正在进行。烧录完成后,只有我们指定的LED会按照预设的频率反复点亮和熄灭,实现闪烁效果。

        串口打印功能的实现与LED点亮类似。在setup()函数中,我们需要初始化串口通信,并设置适当的波特率。在loop()函数中,我们编写代码,使开发板能够周期性地通过串口发送字符串信息。

 

3. 基础任务:驱动点阵LED

       【【Follow me第二期】入门任务 - 开发环境配置+LED点亮+串口打印+LED点阵驱动 - DigiKey得捷技术专区 - 电子工程世界-论坛 (eeworld.com.cn)

        设计思路: 与单个LED的控制相似,点阵LED的控制原理也是通过设置对应位置的管脚电平来控制LED的点亮或熄灭。然而,由于涉及的LED数量较多,我们无法对每个LED进行单独配置,因此需要采用一种编码规则来实现有效的控制。我们可以参考官方提供的使用教程,有matrix.renderBitmap()和matrix.loadFrame()两种编码方式,分别使用单独每一个LED位置赋二进制数和将连续四个LED位置转换成16进制两种方式。

        在浏览例程时,我们注意到“GameOfLife”例程提供了动态效果的实现。受此启发,我们制作了一个动态点亮笑脸图案的小动画。该动画的原理是随机选择矩阵中的行和列进行点亮或熄灭,然后在主体循环中不断刷新matrix.renderBitmap()以展示动态效果。

        除了动态图案,我们还尝试了使用LED矩阵显示字符。这主要借助于ArduinoGraphics.h库。在“TextWithArduinoGraphics”例程中,我们看到可以使用matrix.beginDraw()和matrix.endDraw()构建显示框架,并设置了字体大小和内容。通过matrix.textScrollSpeed()函数,我们可以控制字符的滚动速度和方向。

        综上所述,我们实现了LED矩阵的多种驱动方式和功能。我们将随机生成笑脸图案的代码放在setup()函数中,作为一次性的开屏动画。动画结束后,开发板将循环播放字符串滚动效果。

 

4. 基础任务:DAC生成正弦波

       【【Follow me第二期】基础任务 - DAC+OPAMP+ADC以及上位机波形显示 - DigiKey得捷技术专区 - 电子工程世界-论坛 (eeworld.com.cn)

        设计思路:由于需要直观地展示波形,而我们目前缺乏便携式示波器,因此我们将采用本地Arduino IDE内置的串口绘图工具作为替代方案。我们的思路是使用analogWave库,并通过配置使其通过DAC输出波形。然后再调用ADC模块,将DAC输出的模拟信号再转回数字信号,并通过串口发送。通过配置串口的传输波特率并开启串口,发送的数据将基于ADC采集得到。

 

5. 基础任务:OPAMP放大DAC信号

        【【Follow me第二期】基础任务 - DAC+OPAMP+ADC以及上位机波形显示 - DigiKey得捷技术专区 - 电子工程世界-论坛 (eeworld.com.cn)

        设计思路:我们参考官方文档中的Arduino内置运算放大器的管脚配置,输入信号连接至A1(运放的正输入端),A2作为负输入端,A3则作为输出端。我们的思路是设计如图的电压放大器,根据其增益计算公式,选择R1和R2两个均为10kΩ的电阻。电路连接方式如下:A0作为DAC的输出,与A1相连,作为运放的同相输入端;A2作为运放的反相输入端,通过R1和R2电阻分别连接至GND和A3。

        在代码中,我们需要配置好OPAMP模块,调用OPAMP.h头文件,并设置运放的工作模式为高速模式。由于ADC读取的数值来源于运放的输出端口,我们将analogRead端口绑定为A3。我们设计的是一个二倍放大器,从ADC采样到的电压从原来的半量程(8位,约128)增加到了满量程(255左右),成功实现了输出电压的翻倍。

 

6. 基础任务:ADC采样上传上位机显示

        【【Follow me第二期】基础任务 - DAC+OPAMP+ADC以及上位机波形显示 - DigiKey得捷技术专区 - 电子工程世界-论坛 (eeworld.com.cn)

        这一过程在前两个任务中已有展示,在此将对之前的DAC输出信号和经OPAMP放大后的信号进行汇总显示,从而直观地展示放大器的效果。在图中,蓝线代表DAC的输出信号,而红线代表经OPAMP放大后的信号,直观地展示了二倍电压放大的效果。

 

 

7. 进阶任务:ArduinoWifi连接并通过MQTT协议接入到HomeAssistant平台

        【【Follow me第二期】进阶任务 - WiFi+MQTT协议连接智能家居HA平台 - DigiKey得捷技术专区 - 电子工程世界-论坛 (eeworld.com.cn)

        我们首先需要安装并配置Home Assistant(HA),考虑到便利性和易用性,我们选择使用Docker拉取HA容器。拉取完成后,我们需要配置Docker容器在本地的存储位置,并运行容器。运行上述命令后,我们可以在Docker Engine中看到名为homeassistant的容器。通过访问http://localhost:8123,可以进入Home Assistant的Web界面。

        然后我们需要配置EMQX平台,EMQX平台是一个高性能、可扩展的MQTT消息服务器。类似的,我们还是采用docker拉取容器的方式。拉取完成后,我们可以使用以下命令来运行EMQX容器。此时可以看到docker的容器列表中新增了emqx容器。使用https://localhost:18083端口可以打开EMQX平台,输入默认的账号密码即可登录EMQX Dashboard。

        接下来,我们需要在EMQX Dashboard中创建客户端认证,并添加用户作为HA平台的接入。我们需要在HA平台中配置MQTT服务,填写相关的配置信息,包括EMQX平台的IP、用户名和密码等。这样,HA平台就可以通过MQTT协议与EMQX平台进行通信了。EMQX平台的在线连接数来从0变为1,说明HA平台已经成功接入。

        设计思路:在此基础上,我们使用Arduino的Wifi模块,使其接入HA平台。我们的思路是使用WiFiS3库来配置WiFi模块,使用WiFi.begin启用WiFi并连接手机热点。然后,我们需要安装MQTT和HomeAssistant相关的库文件,我们引入ArduinoHA.h头文件,以便使用HomeAssistant平台。我们使用HADevice和HAMqtt来创建HA设备启用MQTT协议。我们实例化了几个HA订阅的传感器,比如按钮、模拟传感器和更新时间传感器等,这些可以根据后面任务的需求进行调整。

        完成后需要在程序的主循环中通过mqtt.loop()使其使用MQTT协议进行信息的发送。后面我们就仿照例程中发送传感器数据的方式,添加了两个每间隔1000ms进行一次更新采集数据和时间的代码。全部代码完成以后,将其烧录,同时启动docker中的HA容器和EMQX容器,我们可以看到Arduino首先成功连接了wifi,并输出wifi的相关信息,然后尝试建立MQTT的连接并且成功连接,Arduino通过串口发送了采集到的传感器电压,以及更新时间。

 

8. 扩展任务:多模态传感器的使用并上传数据到HA平台

        【【Follow me第二期】扩展任务 - LTR329+SHT40传感器的使用并上传数据到HA平台 - DigiKey得捷技术专区 - 电子工程世界-论坛 (eeworld.com.cn)

        任务使用的外部传感器为LTR-329环境光传感器和SHT40温湿度传感器,关键在于掌握这两种传感器的配置和数据传输的方法。为了简化连接过程,我们采用了Qwiic缆线连接方式,将传感器与Arduino开发板相连。

        有关两个传感器的配置方法已经被分别封装在“Adafruit LTR329 and LTR303”和“Adafruit SHT4X”库中,我们都暂时保持默认即可。由于我们只采购了一条Qwiic缆线,这里以温湿度传感器为例,介绍如何实现数据采集和上传到HA平台。

        设计思路:我们的思路是在此前实现的Arduino连接HA平台的基础上,将新添加的传感器实例化为模拟信号传感器,然后初始化SHT4X模块,我们把全部配置参数都设成默认即可。最后在主循环中,我们直接使用例程中的温湿度数据获取的函数,然后通过Sensor.setValue()函数显示到HA界面上。

        完成代码编写后,我们启动Docker Engine,打开HA和EMQX平台的容器,并将代码烧录到Arduino。测试结果显示,我们可以看到网络连接和MQTT连接的信息,并确认了SHT40传感器的连接。当我们打开HA平台时,可以看到设备增加了新的传感器,并且更新了数据单位信息,数据也会随时间不断更新。

 

        以上就是本次Follow me活动的所有任务实现过程的分享,感谢大家。

 

项目心得:

        Arduino的开发环境配置过程简单直观,无论是使用在线编辑器还是本地IDE,都能快速上手。整个项目过程中,通过实际操作和问题解决,提升了编程能力、硬件操作技能以及对物联网平台的熟悉度。通过不断学习和实践,对Arduino平台和物联网技术有了更深入的理解,为未来在相关领域的进一步探索打下了坚实的基础。

 

演示视频:

        【【Follow me第二季第二期】任务汇总(by Aclicee)-【Follow me第二季第二期】任务汇总(by Aclicee)-EEWORLD大学堂

 

程序源码:

        代码链接【Follow me第二季第二期Code by Aclicee-嵌入式开发相关资料下载-EEWORLD下载中心】,也随附在本帖下:

         Follow me第二季第二期Code by Aclicee.zip (9.27 KB, 下载次数: 2)

 

点赞 关注
个人签名

就是个臭打游戏

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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