基于FireBeetle 2 ESP32-S3的物联网点灯
木子说,试用报告不能写得太水,其他我第一篇打算写开箱报告并实现点亮板载灯,既然木子说了不能太水,那箱就不开了,直接使用FireBeetle 2 ESP32-S3完成一个物联网点灯的小项目。话说点灯是开发板永远的话题,就像学编程第一个程序一定是打印Hello World。仔爸在之前已经写过一篇《基于esp32-c3的物联网点灯》,我就在此基础上再进行一次迭代修改,增加一些内容——这就是所谓的创新吧,哇哈哈哈哈……
一、物联网服务器的选择和使用
本项目不再用行空板上的SIOT2.0,为什么不选择呢?因为仔爸没有搞定后面的根据发送信息生成二维码,所以采用的是Siot 1.3,请允许我自降版本。去gitee上下载吧(下载地址:https://gitee.com/vvlink/SIoT/tree/master/software/),虽然github上也有,但可能也许大概率会访问不了。
好了,下载后解压,然后双击“SIoT.exe"启动物联网服务器(仔爸使用的是For win版本)
然后我们会发现弹出一个终端窗口,里面显示物联网服务器的两个地址,请复制第一个192开头的服务器地址备用。
接下来,打开任意一款浏览器,在地址输入192.168.10.136:8080(请根据你所看到的IP地址进行替换),第一次登录需输入用户名和密码(用户名siot,密码dfrobot)
然后我们会看到已经存在的设备名称,当然我们可以新建一个,但仔爸瞪大了眼睛查了很久也没有发现创建、新建之类的按钮。惯性思维限制了我前进的道理,直到我发现是不是可以凭空发送一个消息就可以创建了呢?果然如此。单击”发送消息“标签,在”主题(项目ID/设备名)"下面的文本框中输入一个用斜杠分隔的字符串(项目ID和设备名称请随意命名),如下图。
然后我们就会发现已经在”设备列表“中显示刚才新建的主题了。
二、无线网络
物联网程序离不开网络,我们需要将使用的电脑,以及ESP32-S3保持连接在同一网段(一般是局域网,只要连接同一个路由器即可)。然后通过MicroPython对esp32-s3进行编程实现联网。可以直接抄一段MicroPython官网中提供的样例代码。
def WIFIconnect(): #无线链接
import network
ssid='shufang'#无线名称
password='25222214'#无线密码
station=network.WLAN(network.STA_IF)
if station.isconnected() == True:
print("WiFi already connected")
print(station.ifconfig())
return
station.active(True)
station.connect(ssid,password)
while station.isconnected() == False:
pass
print("Connection successful")
print(station.ifconfig())
三、编写esp32-s3上的主程序
主程序的主要功能是,实现连接局域网,然后循环侦听物联网服务器发送过来的消息,如果收到消息为1则点亮板载灯,如果收到0,则熄灭板载灯。关于采用Thonny来编写MicroPython的基础操作,可以查看仔爸上一篇"Beetle ESP32 C3 物联网亮板载灯"。其实两者的代码基本是一样的。
import time
from machine import Pin
import siot #导入同目录下的siot.py
led=Pin(21,Pin.OUT)
SERVER="192.168.10.136"#siot服务器地址
CLIENT_ID=""
IOT_pubTopic='siot/light_sitch'
IOT_UserName='siot'
IOT_PassWord='dfrobot'
siot.init(CLIENT_ID,SERVER,user=IOT_UserName,password=IOT_PassWord)
def WIFIconnect(): #无线链接
import network
ssid='shufang'#无线名称
password='25222214'#修改为无线密码
station=network.WLAN(network.STA_IF)
if station.isconnected() == True:
print("WiFi already connected")
print(station.ifconfig())
return
station.active(True)
station.connect(ssid,password)
while station.isconnected() == False:
pass
print("Connection successful")
print(station.ifconfig())
def sub_cp(topic,msg):
#print((topic,msg))
s=msg.decode()#对接收到的信息解码
print(s)
if s=='1':#接收的消息1就亮灯
led.value(1)
else:
led.value(0)
WIFIconnect()
siot.connect()
siot.set_callback(sub_cp)
siot.subscribe(IOT_pubTopic,sub_cp)
#siot.loop()
while True:
time.sleep(1)
siot.check_msg()
四、开始点灯
首先运行esp32-s3上的主程序,并保持等待状态。然后在刚才打开的浏览器界面,通过手工发送消息1和0,我们会发现随着我们发送1,则板载灯点亮,发送0则熄灭。物联网就是这么神奇,大家脑补一下,把点灯改为其他各类操作是不是马上想通了?比如启动马达,比如各类传感器。
等一下,每次点灯要打开网页并手工发送消息,这不是我们该提倡的,能否用手机来操作呢?显然手机最方便的就是扫码,我扫,我扫,我扫扫扫。这时候仔爸凭着N年前学过编写网页的经验,要把GET和POST用上了。也就是手工发送1是不是可以变成一个访问的网址,如果这样,我们把这个网址转换成二维码就行了。网址可不好找,但还是被细心的仔爸找到了。还记得启动Siot服务器时弹出的终端窗口吧,当我们发送消息时,会滚动一些信息,奥秘就在里面。观察下图红框中的一串字符,就是发送的真实地址,最前面的斜杠左侧再加上服务器地址即可,也就是192.168这个开头的物联网地址。
试着把拼接的真实发送地址粘贴到浏览器,然后按下回车键,试试能不能开关灯。
192.168.10.136:8080/publish?iname=siot&ipwd=dfrobot&topic=siot%2Flight_sitch&msg=1&_=1693839667888
接下来,我们将这两个开关灯的网址转换成二维码。在Thonny中切换到本地python环境(不要选择esp32-s3上的解释器),然后单击”工具>管理包",搜索并安装qrcode。
然后在本地电脑上编写下面的生成二维码程序。
import qrcode
# 生成亮灯二维码
data='http://192.168.10.136:8080/publish?iname=siot&ipwd=dfrobot&topic=siot%2Flight_sitch&msg=1&_=1693841071912'
img = qrcode.make(data)
print(type(img))
img.save('light_on.png')
#生成灭灯二维码
data='http://192.168.10.136:8080/publish?iname=siot&ipwd=dfrobot&topic=siot%2Flight_sitch&msg=0&_=1693841071912'
img = qrcode.make(data)
print(type(img))
img.save('light_off.png')
将该程序保存并运行,我们发现同一目录下会生成二个图片文件,把这两个二维码图片插入到Word中并做好标志(当然你也可以打印出来)。然后我们用手机扫一扫的功能尝试一下,板载灯会实现开灯和关灯的效果了。
仔爸还有一个想法,就是使用行空板上的Siot服务器,并把二维码动态生成在行空板上的屏幕上,但目前还没有成功,交稿迫在眉睫,只能将就一下了。
支持http访问被你这么发现了真是太厉害了,siot1.X版本的wiki里面有关于http访问的内容。
页:
[1]