万物互联的时代,网络通讯功能必须强! M5Stack因为可以通过wifi接入互联网,所以自然是可以方便的通过网络来传输数据的。
其实M5Stack可以用UIFlow的Web IDE进行编程,程序编写完毕后通过Cloud云端下载到M5Stack,云端通过一个8位16进制的APIKEY识别每个M5Stack。这个APIKEY可以在M5Stack的云端编程模式下看到。
M5Stack之间也可以向特定的APIKEY的另一个M5Stack发消息,这个可以在UIFlow Web IDE的Network模块里面找到相关功能。不过这个功能看起来过于简单,而且应该是比较依赖M5Stack的官方服务器(不确定可靠性怎样),也只能在M5Stack之间交换消息,所以我并没有深入研究。
MQTT是IoT领域广泛使用的,比较适合做轻量的数据交换。用起来也比较简单方便,就直接上示例代码了:
import wifisetup
wifisetup.auto_connect()
from m5mqtt import M5mqtt
m5mqtt = M5mqtt('m5stack','m88.cloudmqtt.com',21399,'user','password',60)
def fun(topic_data):
print(topic_data)
m5mqtt.subscribe('iPad',fun)
m5mqtt.start()
m5mqtt.publish('PC','hello')
- 首先要连上wifi网络
- m5stack是随便写的client-id;m88.cloudmqtt.com是MQTT服务器,我用的cloudmqtt,5个以下连接免费;21399是端口;user是用户名;password是密码;60是keepalive时间,单位是秒
- fun是收到了订阅的topic的消息的callback函数
- m5mqtt.start()我想是开始了一个检查订阅消息的线程
- m5mqtt.publish是发布了一个topic为“PC”的消息
简单的使用MQTT很容易,网络上也有很多介绍MQTT的文章,很容易上手。
下面我就给上次写的记录温湿度的程序加入发布温湿度数据到MQTT服务器的功能。因为只加入了publish功能,所以并没有subscribe以及相应的回调函数。
from m5stack import *
from m5ui import *
import units
import wifisetup
wifisetup.auto_connect()
from m5mqtt import M5mqtt
print('Init.m5mqtt...')
m5mqtt = M5mqtt('m5stack','m88.cloudmqtt.com',21399,'user','password',60)
rtc = machine.RTC()
rtc.ntp_sync(server = "ntp.aliyun.com",tz='CST-8')
while not rtc.synced():
print("Waiting time synced with NTC server.")
wait(0.2)
clear_bg(0x0)
env0 = units.ENV(units.PORTA)
flag_rec = False
flag_disp = True
inteval = 30 # seconds
filename = '/sd/' + time.strftime('%Y%m%d_%H%M%S',time.localtime())