最近在和自己的小组捣鼓怎么将STM32的串口数据传输到MQTT服务器上,由于是第一次,所有走了一些弯路。在这里分享一下自己的这次经验。在开始之前,我想对我另外的两个队员:小杨、小行,说:你们幸苦了!
在开始之前,你得要会lua语言,并且要配置ESP8266的环境,在这里我推荐一个视频 ----> 视频地址。这个视频里详细的说了怎么配置ESP8266环境,并且也介绍了lua语言,个人认为足够用了,比较适合刚刚接触这个的人。
然后接下进行第一步,STM32与ESP8266的连接,开始我也琢磨怎么连接,结果就是最简单的连接就行了,STM32上的RXD连ESP8266上的TXD,剩下的类推就行了,然后在ESP8266中写入一个串口接收程序就行了。
程序很简单:
uart.on("data",function(data)
tmr.delay(1)
print("从串口读取的数据:",data)
end, 0)
这里要注意的一点,这个串口接收程序不能一开始就写,否则后面写入的程序可能会报错。
接下来就是ESP8266连接WiFi了,连接WiFi的程序如下:
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","PASSWORD") //SSID WiFi名称,PASSWORD WiFi密码
wifi.sta.connect()
tmr.delay(500000)
print(wifi.sta.getip())
当看到返回了ip地址,表明连接已成功。
然后就是配置MQTT了。
配置如下:
m=mqtt.Client(Clientid,3,MqttUserName,MqttUserPassword)
m:connect(MqttServerIP, MqttServerPort, 0,
function(client)
print("connected")
end
)
m:lwt("/lwt", "offline", 0, 0)
m:on("connect", function(client) print ("connected") end)
m:on("offline", function(client) print ("offline") end)
里面的一些配置需要根据自己的情况设置参数。
Clientid:mqtt客户端ID(唯一).
MqttUserName:Mqtt服务器用户名.
MqttUserPassword:Mqtt服务器用户名密码.
MqttServerIP:Mqtt服务器ip.
MqttServerPort:Mqtt服务器端口.
然后进行连接,当看到 connected 则表明连接已成功。
当到这一步,基本已经成功了。上面的都是一步步测试程序。
接下来给上init程序:
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","PASSWORD")
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
if wifi.sta.getip()== nil then
print("IP unavaiable, Waiting...")
else
tmr.stop(1)
print("Config done, IP is "..wifi.sta.getip())
m=mqtt.Client(Clientid,3,MqttUserName,MqttUserPassword)
m:connect(MqttServerIP, MqttServerPort, 0,
function(client)
print("connected")
end
)
m:lwt("/lwt", "offline", 0, 0)
m:on("connect", function(client) print ("connected") end)
m:on("offline", function(client) print ("offline") end)
uart.on("data",
function(data)
m:publish("demo",data,0,1,
function(m)
end
)
data = 0
end
)
end
end
)
好了,到这正式结束了。其实弄懂了流程就很简单,就是开始接触时不知道往哪下手。再次提醒下,以上程序代码都是用lua语言编写的。所以一定要有lua语言基础。