WiFi与物联网(MQTT)¶
用如下代码即可将NodeMCU连接至网络:
wifi('wifiname', 'wifipwd') # 请将内容改成自己的WiFi名和密码,注意不要有引号、中文等特殊字符,尽量纯英文+数字
连接网络后,即可使用urequests库,具体方法请查看 urequests源代码
本项目已集成MQTT,可以方便的基于MQTT开发物联网设备。
MQTT是一种针对物联网优化过的协议,其结构很简单,为’主题-内容’对应式结构,下面用一个例子来说明:
假设C1是放置于机房的温度传感器物联网设备,C2是放置于办公室的机房过热报警灯。 那么C1可以发布一个主题,名为’computer_room/temperature’,值为当前温度。 C2可以订阅一个主题,名字与上述C1名一致。 这样一旦’computer_room/temperature’这个主题发生改变,C2就可以立刻获取改变后的值。获取值以后,可以判断其是否高于某个温度,从而决定是否发出警报。
默认情况下,一旦连接wifi,就会连接上test.mosquitto.org的服务器,该服务器是公共服务器,如您只是测试使用,可用此服务器,如正式使用,请务必切换到安全的服务器。
用如下代码可以指定自己的MQTT服务器和验证方式:
wifi('wifiname', 'wifipwd', False) # 需要在连接WiFi时加入False参数,否则会直接连接到test.mosquitto.org服务器。
mqtt_init(host='www.yoursite.org', port=1883, user='yourusername', pwd='youruserpwd') # 如果你的mqtt服务器没有验证,则可以不填写mqtt_user与mqtt_pwd
发布主题:
pub('topic/can/split/like/path', 'str content') # 注意必须使用str类型,如果是数字类型请自行转换
主题只能用英文,消息如果包含中文,需要进行编码:
msg = '中文消息'
pub('topic/can/split/like/path', msg.encode('utf-8'))
订阅主题,并设置触发后的操作:
@sub('a/topic') # 主题可以模糊订阅,用+表示一个级数,#表示多个级数
def whatevername(topic, msg): # 一旦订阅的主题发生改变,此函数就会接受发生改变的主题topic和消息msg
# 接受到的topic和msg都是bytes类型,需要用decode转成字符串类型
topic = topic.decode('utf-8')
msg = msg.decode('utf-8')
print(topic, msg)