STM32
直播中

jackhui

12年用户 1148经验值
私信 关注
[问答]

如何通过ESP8266将STM32串口数据传输到MQTT服务器?

如何通过ESP8266将STM32串口数据传输到MQTT服务器?

回帖(1)

刘恩彤

2021-12-13 15:07:19
最近在和自己的小组捣鼓怎么将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语言基础。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分