43606| 2
|
[ESP8266/ESP32] 基于Beetle ESP32 C6开发板和物联网的环境检测 |
本帖最后由 仔爸 于 2024-3-30 15:02 编辑 物联网环境检测 拿到DFROBOT赠送的Esp32C6主控板之后,我就开始“快乐”地玩耍起来。看到前面快乐加了引号,你就知道我当时内心其实挺崩溃的,因为DF目前只提供Arduino的方案。幸亏乔楚老师为DFROBOT的ESP32 C6编译了MicroPython的固件,才能真正快乐地玩起来。 首先当然是为板子烧录固件,之前一起使用flash_download_tool_3.9.3版本的软件进行烧录,发现并不支持C6,果然从官网下载V3.9.5版本,支持烧录ESP32 C6,方法与C3、S3等ESP32家族的板子差不多,不再赘述。 一、项目概况 接下来,首先看一下本项目的基本概况,如下思维导图所示。本项目通过连接到ESP32 C6上的DHT11温湿度传感器获取环境数据,并显示在四位数码管(基于TM1637)上,同时将采集到的数据,通过WIFI发送到SIoT服务器,然后大Mind+的可视化面板展示出来。 二、所需硬件
三、项目实现 (一)硬件连接 根据如图所示进行硬件连接(注意四位数码管上显示的不是时间,而是温度和湿度,中间用冒号隔开)。由于我将排针焊接到ESP32 C6上之后,板子上的引脚编号无法看到,因此可以对照DF知识维库上的图片进行对照。这里我把DHT11的数据引脚接到了板子的7号引脚。将TM1637四位数码管的CLK和DIO分别接到了板子的22和23号引脚。你在连接的时候不一定是这几个引号,只要对应即可。 (二)软件编程 1.环境数据采集程序 刚烧录好固件,通过在交互式编程界面输入help(‘modules’)可以查看该固件内置了哪些模块,通过观察,我们可以发现里面直接内置了DHT模块,省去我们另外去找传感器的驱动模块。此外我们还可以在交互窗口输入以下两条语句,具体查看一下该模块的相关帮助信息,另外还了解到该模块同时支持DHT22传感器。 import dht help(dht) 因为我们还将使用主板上的7号引脚,需要使用machine模块中的Pin函数。使用下面的语句导入 from machine import Pin 接下来,通电开始让DHT11工作,使用下面的几条语句 d = dht.DHT11(Pin(7)) #创建一个dht对象,并调用接到主板7号引脚上的DHT11模块 d.measure() #开始测试 t = d.temperature() #获得温度数据 h = d.humidity() #获得湿度数据 本着强烈的探索精神,如果我们要探索一个具体实例化类里面的变量和方法,我们还可以在交互窗口继续输入以下内容: 好了,到此我们已经可以获取传感器上的数据了,不如先将数据打印出来,以下是完整的获取数据并打印出来的程序。 import time,dht from machine import Pin d =dht.DHT11(Pin(7)) while True: d.measure() t = d.temperature() h = d.humidity() print(str(t)+' '+str(h)) time.sleep(3) 2.将数据显示在数码管上 接下来我们考虑将获取到的温湿度数据显示在一个物理设备上,手头正好有一个基于TM1637芯片的四位数码管,因为只要显示数字,也就不考虑液晶屏了。 要使用这个硬件,通过help(‘modules’)没有发现可以使用的驱动模块,好在互联网上有许多资源,轻松就可以获取到,前提是我们要知道一些硬件的参数。一般在购买硬件的页面有提供,有些商家甚至服务到家,连各类驱动程序一并提供。 我们在搜索引擎中搜索关键字:github micropython tm1637,在搜索结果中仔细排查寻找,终于找到它了。 正所谓:“众里寻他千百度,蓦然回首,那人却在,灯火阑珊处”,只是这次我没有用百度,用的是必应,真是有求必应啊。但转念一想,是不是也在百度中找找看呢,结果不看不知道,一看吓一挑,好家伙,有长进啊,大大地好。 进入Github仓库,将这个库下载。 将下载包解压后,找到里面的tm1637.py文件,将它上传到板子上,我在Thonny中进行操作,单击“视图>文件”,左侧会出现ESP32 C6板子上空间的文件列表,为了更好地管理第三方库,我们创建一个lib文件夹,并将tm1637.py上传到该文件夹内,后面用到的siot.py文件也将传到这里。如果你还不会使用Thonny连接ESP32并进行文件上传下载及编程,请查看这篇文章:《Beetle ESP32 C3 初体验》 好了,准备好了这个库,我们可以通过下面的语句将这个库引入我们的程序: from lib import tm1637 我们可以将lib文件夹看成一个大库的集合,要从这个大集合中找到需要的库,用from,如果你不创建文件夹,直接将tm1637.py上传到板子的根目录,那么下面这条语句就可以了。 import tm1637 是不是瞬间觉得import和fromimport不那么胡搅蛮缠啦。 刚才连接硬件的时候,我们已经将四位数码管的clk和dio连接到板子的22,23号引脚,因此通过下面这条语句来创建一个新的对象中以。 tm =tm1637.TM1637(clk=Pin(22),dio=Pin(23)) 当然,打开tm1637.py去看一看这个库里面是如何编写的,里面有哪些函数和方法,也是一种非常好的探究学习的方式。 通过查看tm1637.py文件内容,或者查看github上的简介,我们可以找到一些有用的信息,比如显示数字可以用number或numbers方法。 然后我们可以修改程序为(加粗的为新增语句): import time,dht from machine import Pin from lib import tm1637 d =dht.DHT11(Pin(7)) tm = tm1637.TM1637(clk=Pin(22),dio=Pin(23)) while True: d.measure() t = d.temperature() h = d.humidity() print(str(t)+' '+str(h)) tm.numbers(t,h) time.sleep(3) 运行程序,温湿度传感器获取的数据就显示在四位数码管上了,是不是很神奇。Python就是这么神奇,你只要拿用模块直接使用,而不需要深究它的实现过程。 3.将数据发送到SIoT服务器 数据获取了,也显示出来了,接下来我们一不做二不休,将数据发送出去,送到物联网服务器吧,这里采用SIoT V2。之前我写过类似的文章,如《Beetle ESP32 C3 通过网络获取气象数据》。 进入https://github.com/vvlink/SIoT,下载这个仓库有点大,因为包含了SIoT整个开源代码,那么我们就只要找到siot.py模块,想办法把它拿下来就行了。 如果你不会单独将这个文件下载下来,那么你就在附件里面下载吧。然后将soit.py文件上传到ESP32 C6板子的lib文件夹内。仍使用下面的语句将其引入 from lib import tm1637,siot 且慢,SIoT服务器在哪?目前V2版本由DFROBOT在开发维护,处于测试阶段,从下面的网址下载,解压后双击startSIoT.bat运行(出现黑色终端窗口表示运行)。 通过上图中的本机IP访问SIoT服务器,并创建两个主题,这两个主题名字在程序中将使用。 请确保ESP32 C6和SIoT服务器在同一个局域网段,比如连接同一个路由器,或者本机是笔记本的话,将笔记本作为热点。然后在程序中首先添加连接WIFI: def do_connect(): import network wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect('无线名称', '密码') # 此处填写无线热点的信息 while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) do_connect() 然后创建对象并连接: IOT_UserName = "siot" IOT_PassWord = "dfrobot" SERVER = "192.168.0.105" CLIENT_ID= ""# 设置客户端ID siot.init(CLIENT_ID,SERVER,user=IOT_UserName,password=IOT_PassWord) siot.connect() 然后就可以往服务器发送数据了,注意发送数据的前缀“->”可以实现将数据保存在服务器端。 while True: d.measure() t = d.temperature() h = d.humidity() print(str(t)+' '+str(h)) siot.publish(b"siot/温度", (str('->')+str(t))) siot.publish(b"siot/湿度", (str('->')+str(h))) tm.numbers(t,h) time.sleep(3) 4.可视化面板显示数据 SIoT服务器上有了数据,我们就可以在Mind+1.8的可视化面板中将其显示出来。具体操作可以参考文章:《Beetle ESP32 C3 通过网络获取气象数据》 四、完整程序 import time,dht from machine import Pin from libimport tm1637,siot def do_connect(): import network wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect('bitcode', 'bitcode.vip')# 此处填写无线热点的信息 while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) do_connect() time.sleep(0.5) IOT_UserName= "siot" IOT_PassWord= "dfrobot" SERVER ="192.168.0.105" #mqtt_port= 1883 CLIENT_ID= ""# 设置客户端ID siot.init(CLIENT_ID,SERVER,user=IOT_UserName,password=IOT_PassWord) siot.connect() #client =MQTTClient(client_id, mqtt_server,mqtt_port,mqtt_user, mqtt_password)# 创建MQTT客户端实例 #client.set_callback(sub_cb) #client.connect()# 连接到MQTT服务器 tm =tm1637.TM1637(clk=Pin(22),dio=Pin(23)) d = dht.DHT11(Pin(7)) while True: d.measure() t = d.temperature() h = d.humidity() print(str(t)+' '+str(h)) siot.publish(b"siot/温度", (str('->')+str(t))) siot.publish(b"siot/湿度", (str('->')+str(h))) tm.numbers(t,h) time.sleep(3) siot.stop() 五、项目反思 在本项目的实现过程中,对于连接物联网服务器,我尝试了几种方法,比如使用umqtt/simple连接EMQX和SIoT,但前者没有连接成功,后者连接不稳定,所以最终采用siot.py模块来实现连接。 实现了温湿度数据的采集,接下来我们就可以扩展其他数据的采集,如环境噪音,光线,天气数据等。也可以通过订阅SIoT主题并获得相关消息来控制一些硬件的开关和运行。 |
4.71 KB, 下载次数: 2764
两个第三方库文件
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed