43606浏览
查看: 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+的可视化面板展示出来。
基于Beetle ESP32 C6开发板和物联网的环境检测图1

二、所需硬件
  • ESP32 C6
  • DHT11温湿度传感器
  • TM1637四位数码管
  • 面板包和杜邦线等
三、项目实现
(一)硬件连接
根据如图所示进行硬件连接(注意四位数码管上显示的不是时间,而是温度和湿度,中间用冒号隔开)。由于我将排针焊接到ESP32 C6上之后,板子上的引脚编号无法看到,因此可以对照DF知识维库上的图片进行对照。这里我把DHT11的数据引脚接到了板子的7号引脚。将TM1637四位数码管的CLK和DIO分别接到了板子的22和23号引脚。你在连接的时候不一定是这几个引号,只要对应即可。
基于Beetle ESP32 C6开发板和物联网的环境检测图15
(二)软件编程
1.环境数据采集程序
刚烧录好固件,通过在交互式编程界面输入help(‘modules’)可以查看该固件内置了哪些模块,通过观察,我们可以发现里面直接内置了DHT模块,省去我们另外去找传感器的驱动模块。此外我们还可以在交互窗口输入以下两条语句,具体查看一下该模块的相关帮助信息,另外还了解到该模块同时支持DHT22传感器。
import dht
help(dht)

基于Beetle ESP32 C6开发板和物联网的环境检测图4
因为我们还将使用主板上的7号引脚,需要使用machine模块中的Pin函数。使用下面的语句导入
from machine import Pin
接下来,通电开始让DHT11工作,使用下面的几条语句
d = dht.DHT11(Pin(7)) #创建一个dht对象,并调用接到主板7号引脚上的DHT11模块
d.measure() #开始测试
t = d.temperature() #获得温度数据
h = d.humidity() #获得湿度数据
本着强烈的探索精神,如果我们要探索一个具体实例化类里面的变量和方法,我们还可以在交互窗口继续输入以下内容:
基于Beetle ESP32 C6开发板和物联网的环境检测图2
好了,到此我们已经可以获取传感器上的数据了,不如先将数据打印出来,以下是完整的获取数据并打印出来的程序。
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,在搜索结果中仔细排查寻找,终于找到它了。
基于Beetle ESP32 C6开发板和物联网的环境检测图3
正所谓:“众里寻他千百度,蓦然回首,那人却在,灯火阑珊处”,只是这次我没有用百度,用的是必应,真是有求必应啊。但转念一想,是不是也在百度中找找看呢,结果不看不知道,一看吓一挑,好家伙,有长进啊,大大地好。
基于Beetle ESP32 C6开发板和物联网的环境检测图5
进入Github仓库,将这个库下载。
基于Beetle ESP32 C6开发板和物联网的环境检测图8
将下载包解压后,找到里面的tm1637.py文件,将它上传到板子上,我在Thonny中进行操作,单击“视图>文件”,左侧会出现ESP32 C6板子上空间的文件列表,为了更好地管理第三方库,我们创建一个lib文件夹,并将tm1637.py上传到该文件夹内,后面用到的siot.py文件也将传到这里。如果你还不会使用Thonny连接ESP32并进行文件上传下载及编程,请查看这篇文章:《Beetle ESP32 C3 初体验

基于Beetle ESP32 C6开发板和物联网的环境检测图6基于Beetle ESP32 C6开发板和物联网的环境检测图7
好了,准备好了这个库,我们可以通过下面的语句将这个库引入我们的程序:
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去看一看这个库里面是如何编写的,里面有哪些函数和方法,也是一种非常好的探究学习的方式。
基于Beetle ESP32 C6开发板和物联网的环境检测图10
通过查看tm1637.py文件内容,或者查看github上的简介,我们可以找到一些有用的信息,比如显示数字可以用number或numbers方法。
基于Beetle ESP32 C6开发板和物联网的环境检测图9
然后我们可以修改程序为(加粗的为新增语句):
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模块,想办法把它拿下来就行了。
基于Beetle ESP32 C6开发板和物联网的环境检测图14
如果你不会单独将这个文件下载下来,那么你就在附件里面下载吧。然后将soit.py文件上传到ESP32 C6板子的lib文件夹内。仍使用下面的语句将其引入
from lib import tm1637,siot
且慢,SIoT服务器在哪?目前V2版本由DFROBOT在开发维护,处于测试阶段,从下面的网址下载,解压后双击startSIoT.bat运行(出现黑色终端窗口表示运行)。
基于Beetle ESP32 C6开发板和物联网的环境检测图11
通过上图中的本机IP访问SIoT服务器,并创建两个主题,这两个主题名字在程序中将使用。
基于Beetle ESP32 C6开发板和物联网的环境检测图12
请确保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 通过网络获取气象数据
基于Beetle ESP32 C6开发板和物联网的环境检测图13
四、完整程序
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主题并获得相关消息来控制一些硬件的开关和运行。

py.rar

4.71 KB, 下载次数: 2764

两个第三方库文件

余老师  见习技师

发表于 2024-4-6 20:57:20

厉害,不过看着感觉过程挺复杂的。
回复

使用道具 举报

地下铁  高级技师

发表于 2024-4-16 09:30:31

非常棒,学习!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail