极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18256|回复: 5

[Micropython][ESP8266] TPYBoard V202 之MQTT协议接入OneNET云平台

[复制链接]
发表于 2017-7-22 13:58:02 | 显示全部楼层 |阅读模式
  随着移动互联网的发展,MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域会有更多的贡献,在物联网领域,传感器与服务器的通信,信息的收集,MQTT都可以作为考虑的方案之一。在未来MQTT会进入到我们生活的各各方面,本篇文章教大家利用TPYBoardv202使用MQTT协议接入OneNET平台,并且远程控制LED灯。

  什么是MQTT协议

  早在1999年,IBM的AndyStanford-Clark博士以及Arcom公司ArlenNipper博士发明了MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输)技术。MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。

  实验准备

  一、硬件材料

  1.TPYBoardv202



  2.面包板

  3.数据线

  4.LED发光二极管

  二、软件准备

  1.MicroPythonFileUploader用于与开发板的文件传输

  下载地址:http://www.tpyboard.com/download/tool/170.html

  2.ESPFlashDownloadTool_v3.3.4TPYBoardv202固件烧写工具

  下载地址:http://www.tpyboard.com/download/tool/185.html

  3.第三方库文件:micropython-lib\umqtt.simple\umqtt\simple.py

  下载地址:http://www.tpyboard.com/download/data/184.html

  4.TPYBoardv202固件

  下载地址:http://www.tpyboard.com/download/firmware/171.html

  OneNET平台创建MQTT协议的产品并添加设备



  如果没有产品,点击创建产品即可,上面显示我已经创建完毕。



  SmartBoy是我添加的设备,当我们插上TPYBoardv202时,就会看到上图绿点点亮,拔了以后就会变灰,前提是板子里程序已经写入。

  实物接线图



  我用的TPYBoardv202的G4引脚,这个引脚可以随便定义,主要看程序里你想用哪个。

  程序源代码

  boot.py源码

  1. #连接本地网络
  2. def do_connect():
  3.         import network
  4.         sta_if = network.WLAN(network.STA_IF)
  5.         ap_if = network.WLAN(network.AP_IF)
  6.         if ap_if.active():
  7.                 ap_if.active(False)
  8.         if not sta_if.isconnected():
  9.                 print('connecting to network...')
  10.         sta_if.active(True)
  11.         sta_if.connect(WIFI名称, '密码') #wifi的SSID和密码
  12.         while not sta_if.isconnected():
  13.                 pass
  14.         print('network config:', sta_if.ifconfig())
  15. do_connect()
复制代码



  mqtt.py源码


  1. from simple import MQTTClient
  2. from machine import Pin
  3. import machine
  4. import micropython
  5. #选择G4引脚
  6. g4 = Pin(4, Pin.OUT, value=0)
  7. # MQTT服务器地址域名为:183.230.40.39,不变
  8. SERVER = "183.230.40.39"
  9. #设备ID
  10. CLIENT_ID = "9377500"
  11. #随便起个名字
  12. TOPIC = b"TurnipRobot"
  13. #产品ID
  14. username='91025'
  15. #产品APIKey:
  16. password='y7zd=7wNaObdfRYhxQn7D5jiDnI='
  17. state = 0
  18. def sub_cb(topic, msg):
  19.     global state
  20.     print((topic, msg))
  21.     if msg == b"on":
  22.             g4.value(1)
  23.             state = 1
  24.             print("1")
  25.     elif msg == b"off":
  26.             g4.value(0)
  27.             state = 0
  28.             print("0")
  29.     elif msg == b"toggle":

  30.             state = 1 - state
  31.             g4.value(state)
  32.            
  33. def main(server=SERVER):
  34.     #端口号为:6002
  35.     c = MQTTClient(CLIENT_ID, server,6002,username,password)
  36.     c.set_callback(sub_cb)
  37.     c.connect()
  38.     c.subscribe(TOPIC)
  39.     print("Connected to %s, subscribed to %s topic" % (server, TOPIC))
  40.     try:
  41.             while 1:
  42.                     c.wait_msg()
  43.     finally:
  44.             c.disconnect()
复制代码


  simple.py源码不用更改,直接按照下载地址下载即可。

  main.py源码

  1. import mqtt
  2. mqtt.main()
复制代码


  源码下载请到:http://www.tpyboard.com/download/data/183.html

  效果展示



  这个时候我们OneNET云平台上设备就会显示在线了



  当我们发送指令on的时候,就会看到控制台显示

  (b'$creq/3e25b3f5-27c8-50d5-b2bb-b7cb7ddddac4',b'on')

  1并且看到我们面包板上的led会亮起来



  当我们发送指令off的时候,就会看到控制台显示

  (b'$creq/c01cc820-72b2-50e2-ab0c-6954d35796ef',b'off')

  0并且看到我们面包板上的led灯会熄灭



  当我们发送toggle时候,就会看到控制台显示:

  (b'$creq/e2f94a0b-7363-56ec-b87c-1d5d02dc4774',b'toggle')

  并且看到我们面包板上的led灯会亮起来,再次发送,控制台会显示:

  (b'$creq/9aa4a04f-eb90-503f-b14f-6f0575869c23',b'toggle')

  我们会看到led熄灭。       

  视频展示效果

  

  在这只是给大家演示了TPYBoardv202怎么用MQTT协议接入OneNet云平台,并教大家如何控制一个外围电路点亮一个led,大家可以利用TPYBoardv202接入更复杂,更好玩的东西。

  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2017-7-28 20:27:40 | 显示全部楼层
照着做了一个,刚开始能用,后面空闲了会出错

connecting to network...
network config: ('192.168.31.212', '255.255.255.0', '192.168.31.1', '192.168.31.1')
Connected to 183.230.40.39, subscribed to b'micropython1' topic
(b'$creq/168af2b5-b424-5561-a8fe-69b6162f58c9', b'toggle')
(b'$creq/6e5dab9a-537e-5c54-992f-8b3f76fa6311', b'toggle')
Traceback (most recent call last):
  File "main.py", line 2, in <module>
  File "mqtt.py", line 43, in main
  File "mqtt.py", line 41, in main
  File "simple.py", line 173, in wait_msg
OSError: -1

MicroPython v1.9.1-8-g7213e78d on 2017-06-12; ESP module with ESP8266
Type "help()" for more information.
回复 支持 1 反对 0

使用道具 举报

发表于 2017-7-22 15:49:08 | 显示全部楼层
本帖最后由 wing 于 2017-7-22 15:52 编辑

本坛讨论mqtt的贴子屈指可数,能得出来而且描述的这么详细的实在可贵。
不过OneNet要注册还真是有点麻烦
回复 支持 反对

使用道具 举报

发表于 2017-8-2 10:53:50 | 显示全部楼层
解决了,加上周期发 ping 即可

#ping every 120 seconds
livebit = Timer(-1)
livebit.init(period=120000, mode=Timer.PERIODIC, callback=lambda t: c.ping())
回复 支持 反对

使用道具 举报

发表于 2017-10-13 12:38:21 | 显示全部楼层
5free 发表于 2017-8-2 10:53
解决了,加上周期发 ping 即可

#ping every 120 seconds

请问加在什么位置
回复 支持 反对

使用道具 举报

发表于 2017-10-13 13:11:36 | 显示全部楼层
OneNet居然也支持mqtt了,与时俱进了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 19:34 , Processed in 0.057625 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表