搭建整套物联网系统的方法有很多,最近四处捣鼓,使用python + 阿里云搭建一套最简单的物联系统,可以将单片机上的数据通过阿里云传输到PC端。

一、基本结构

先看架构图

二、设备端接入

物联网终端是用的ESP32,是一款自带蓝牙和Wifi的单片机。利用它可以直接接入互联网,无需其他模块。当然你可以将现在流行的NB-Iot模块来联网,不过需要自己写一下驱动程序。我买的模块是支持micropython开发的,在淘宝上可以搜索到,用起来很方便。有时间我会补上这一块的初步教程。

Micropython是可以在低端硬件上运行的python,可以使用python语言直接操作IO 和MCU的外设比如UART、I2C等,用起来非常方便,不要搭建复杂的开发环境,也不需要学习寄存器配置。作为一个对传统MCU开发非常熟悉的硬件工程师来说,感觉操作起来非常简单。目前Micropython已经支持很多硬件了,应该用比较广泛的STM32部分系列也被支持。Micropython也已经支持很多常用的库,比如蓝牙,telnet,mqtt等。

ESP32 通过wifi 接入互联网,使用mqtt协议接入阿里云,将温度数据上传至阿里云。在云端通过消息订阅可以直接查看温度信息。在PC端使用python调用MQTT协议,接入到阿里云。但是PC端和ESP32在阿里云上是两个不同的设备,需要通过阿里云来转发信息,这样PC就可以拿到ESP32上传的数据了。

ESP32 上的代码如下:

from umqtt.simple import MQTTClient
import usocket as socket
import time
import wifiwifi.connect()#Demo_01
ProductKey = "*********"#使用你自己的
ClientId = "1234|securemode=3,signmethod=hmacsha1|"
DeviceName = "Demo_01"
DeviceSecret = "*******************************"#使用你自己的strBroker = ProductKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"
Brokerport = 1883user_name = "Demo_01&*********"#使用你自己的
user_password = "**********************************************"#使用你自己的print("clientid:",ClientId,"\n","Broker:",strBroker,"\n","User Name:",user_name,"\n","Password:",user_password,"\n")def connect():client = MQTTClient(client_id = ClientId,server= strBroker,port=Brokerport,user=user_name, password=user_password,keepalive=60) #please make sure keepalive value is not 0client.connect()temperature =25.00while temperature < 30:temperature += 0.5      send_mseg = '{"params": {"IndoorTemperature": %s},"method": "thing.event.property.post"}' % (temperature)client.publish(topic="/sys/*************/Demo_01/thing/event/property/post", msg=send_mseg,qos=1, retain=False)#*号处为product idtime.sleep(3)while True:pass#client.disconnect()

有几点需要说明:
1.代码中的wifi.connect()函数需要自己编写,网上能搜到类似的,也可以打赏私信我所要源码。
2.阿里云物联网平台的接入需要进行三元组认证,会根据一定的规则生成登录名和密码,这个网上信息还是比较全面的。
3.向阿里云物联网平台发布消息的格式一定要按照代码中所写,网上很多代码,但是对这一块的描述都不清楚。

  1. Micropython使用的umqtt.simple库,一定要设置keepalive时间,否则无法连接。这一点我是摸索了好久,最终通过查看库的源码才发现的问题。

三、云端设置

在云端建立一个高级产品,并创建两个设备,以供ESP32 和PC连接。

需要在产品中定义一下功能。

云端和设备端都建立好了之后,可以查看设备运行状态看到数据上传

这是查看数据记录得到的结果

当你看到正确的数据之后,就说明你的成功接入物联网并上传了数据。
接下来就是最重要的部分——设置是使用规则引擎来进行数据转发,将设备demo_01的数据转发到demo_02。这一步的语法很重要,虽然有官网有详细教程,但是当时还是搞了好久才完全正确。

规则查询语句:
SELECT items.IndoorTemperature.value as IndoorTemperature FROM "/sys/use-your-productkey-here/Demo_01/thing/event/property/post" WHERE items.IndoorTemperature.value > 0

四、PC端接入

PC 端使用python模拟MQTT设备登陆阿里云订阅消息就行了,只要装好python很快就可以实现,网上也有很多代码。代码的很大一部分就是在做三元组认证,可以将这部分稍微修改一下来计算ESP32 登陆时所需的
PC端python代码如下:

# coding=utf-8
import datetime
import time
import hmac
import hashlib
import mathtry:import paho.mqtt.client as mqtt
except ImportError:print("MQTT client not find. Please install as follow:")print("pip install paho-mqtt")# 设置连接信息#Demo_02
ProductKey = "*********"#使用你自己的
ClientId = "2234"  # 自定义clientId
DeviceName = "Demo_02"
DeviceSecret ="************************************8**"#使用你自己的# 获取时间戳(当前时间毫秒值)
us = math.modf(time.time())[0]
ms = int(round(us * 1000))
timestamp = str(ms)# 计算密码(签名值)
def calculation_sign(signmethod):data = "".join(("clientId", ClientId, "deviceName", DeviceName,"productKey", ProductKey, "timestamp", timestamp))if "hmacsha1" == signmethod:# ret = hmac.new(bytes(DeviceSecret),#                bytes(data), hashlib.sha1).hexdigest()ret = hmac.new(bytes(DeviceSecret, encoding="utf-8"),bytes(data, encoding="utf-8"),hashlib.sha1).hexdigest()elif "hmacmd5" == signmethod:# ret = hmac.new(bytes(DeviceSecret, encoding="utf-8"),#                bytes(data, encoding="utf-8"), hashlib.md5).hexdigest()ret = hmac.new(bytes(DeviceSecret, encoding="utf-8"),bytes(data, encoding="utf-8"),hashlib.md5).hexdigest()else:raise ValueErrorreturn ret# ======================================================strBroker = ProductKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"
port = 1883client_id = "".join((ClientId,"|securemode=3",",signmethod=", "hmacsha1",",timestamp=", timestamp,"|"))
username = "".join((DeviceName, "&", ProductKey))
password = calculation_sign("hmacsha1")print("="*60)
print(strBroker)
print("client_id:", client_id)
print("username:", username)
print("password:", password)
print("="*60)# 成功连接后的操作
def on_connect(client, userdata, flags, rc):print("OnConnetc, rc: " + str(rc))# 成功发布消息的操作
def on_publish(client, msg, rc):if rc == 0:print("publish success, msg = " + msg)# 成功订阅消息的操作
def on_subscribe(mqttc, obj, mid, granted_qos):print("Subscribed: " + str(mid) + " " + str(granted_qos))def on_log(mqttc, obj, level, string):print("Log:" + string)def on_message(mqttc, obj, msg):curtime = datetime.datetime.now()strcurtime = curtime.strftime("%Y-%m-%d %H:%M:%S")print(strcurtime + ": " + msg.topic + " " + str(msg.qos) + " " + str(msg.payload))on_exec(str(msg.payload))def on_exec(strcmd):print("Exec:", strcmd)strExec = strcmdif __name__ == '__main__':mqttc = mqtt.Client(client_id)mqttc.username_pw_set(username, password)mqttc.on_message = on_messagemqttc.on_connect = on_connectmqttc.on_publish = on_publishmqttc.on_subscribe = on_subscribemqttc.on_log = on_logmqttc.connect(strBroker, port, 120)# mqttc.loop_start()time.sleep(1)temperature =27.55mqttc.subscribe("/sys/************/Demo_02/thing/service/property/set", qos=1)  # 换成自己的#send_mseg = '{"pm_25": %s,"area":"%s","time":"%s"}' % (0, 0, datetime.datetime.now())#send_mseg = '{"id": "1234", "version": "1.0","params": {"IndoorTemperature": %s},"method": "thing.event.property.post"}'%(temperature)send_mseg = '{"params": {"IndoorTemperature": %s},"method": "thing.event.property.post"}' % (temperature)print('send_mseg is : ',send_mseg)mqttc.loop_forever()

五、总结

工作之余了解了一下物联网的发展,看到有意思的东西打算学一下,刚好看到了microPython,震惊之余,决心做点小东西玩玩。

这套框架全部使用python实现,比我了解到的绝大多数物联网方案要简单太多,虽然有些开发首先,但是用来实现一些简单设计应该是不成问题的,只要你会python,这套系统可以很快构建。当然python也是非常好学的,长期使用C语言的人根本不需要什么学习就可以上手。

当然这一套系统也是在学习了很多东西之后才搭建成功的,中间也经历很难多曲折和摸索,前前后后大概花了两周。很多细节无法在一篇文章中展现,如果你在搭建过程中遇到问题可以留言,我看到了尽量回复。

使用Python来做物联网,就是这么简单!相关推荐

  1. python做物联网_使用Python来做物联网,就是这么easy!

    搭建整套物联网系统的方法有很多,最近四处捣鼓,使用python + 阿里云搭建一套最简单的物联系统,可以将单片机上的数据通过阿里云传输到PC端. 一.基本结构 先看架构图 框架.png 二.设备端接入 ...

  2. python自己做个定时器_简单实现python定时器

    下面介绍以threading模块来实现定时器的方法.(课课家) 使用前先做一个简单试验: import threading def sayhello(): print "hello worl ...

  3. 乐学python编程做个游戏很简单_乐学Python编程-做个游戏很简单

    Python简单易学又功能强大,而且免费开源,在国内外的很多公司得到了广泛的应用.在科学计算.游戏.图像.人工智能.机器人.教育教学和航天飞机控制等很多领域,Python也是非常重要的编程工具. 本书 ...

  4. 编程游戏python我的世界_乐学Python编程-做个游戏很简单

    1.进入Python 编程世界/ 2 1.1 启动Python 编程环境/ 5 1.2 Python 之禅/ 9 1.3 送你几朵玫瑰花--运行Python 程序/ 16 1.4 Python 的由来 ...

  5. python函数名是变量_Python 变量做函数名的简单示例

    这篇文章主要为大家详细介绍了Python 变量做函数名的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! PHP ...

  6. python能做什么-普通小白学会Python到底具体能做什么呢?

    Python的应用非常广泛,无论是工作还是生活,Python都是一个既实用又有趣的技能. 刨掉我们常说的Python主要应用领域:Web前端开发,云计算,人工智能,系统运维等等,这些是需要深度学习的. ...

  7. 【含源码】用python做游戏有多简单好玩

    有很多同学问我还有其他什么小游戏吗,游戏是怎么做的,难不难.我就用两篇文章来介绍一下,如何使用Python做游戏. 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱子 消消乐 超多小游戏玩转不停↓  更 ...

  8. 一日一技:用Python做游戏有多简单

    自从表白代码发了以后,有很多同学问我除了这种表白的,还有其他什么小游戏吗,游戏是怎么做的,难不难.我就用两篇文章来介绍一下,如果使用Python做游戏. 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱 ...

  9. 用Python做游戏有多简单

    许多开发者都曾梦想过开发一款属于自己的游戏,其实用Python就可以轻松实现.下图就是我用PyGame开发的一款简易游戏. 这篇文章我会给大家介绍,如何用PyGame实现一个在地图上移动的小猪. 贴图 ...

最新文章

  1. Java并发编程(十)设计线程安全的类
  2. 进度条的另外一种用法
  3. 如何查看S/4HANA指定时间段批量生产订单的状态
  4. c++ fork 进程时 共享内存_c/c++ Linux 进程间通信------共享内存
  5. 【Flink】Flink kafka Spark 如何实现数据有序性
  6. c语言字符串截取_一文搞懂 C 语言 #、##、__VA_ARGS__
  7. python3.7怎么安装wsgiref_python3.x - python3使用wsgiref时环境变量出现乱码
  8. 模板题——贪心(2)
  9. python控制风扇_如何使用Python在raspberrypi3上使用GPIO控制风扇?
  10. linux确定字符行,linux小计,统计文件中包含指定字符串的行数
  11. linux mint 下如何制作win7启动盘
  12. 借助Hugo和Academic主题在github.io建立个人网站
  13. 互联网金融保弘实业理财投资|白领理财有哪些窍门
  14. 基于内容可变长度分块Content Defined Chunking
  15. 极光 短信验证出现403
  16. 解决键盘模式(布局)的错误导致的部分键位失灵或异常(姑且这样描述问题吧)
  17. 【题解】【LibreOJ Round #6】花团 LOJ 534 时间线段树分治 背包
  18. 面试通知短信模板大全
  19. python open encoding=utf-8_Python 文件操作中的读写模式:open(path, '-模式-',encoding='UTF-8')...
  20. 使用码上登录实现微信扫码登录

热门文章

  1. QBasic语言程序设计 金怀群 pdf
  2. Xposed微信支付宝个人免签收款
  3. MyBatisPlus查询时报错,Unknow column ‘id‘ in ‘field list‘,怎么解决?
  4. 玩转Java网页抓取
  5. 计算机仿真技术与cad第三版课后答案,《计算机仿真技术与CAD》的习题答案.doc...
  6. Android 四大组件 -- BroadcastReceiver(广播)
  7. python编写TCP和UDP测试工具
  8. 测开 - 进阶篇 - 细节狂魔
  9. java sca_用于Java的SCA客户机和实现模型
  10. 小程序毕设作品之微信校园浴室预约小程序毕业设计成品(6)开题答辩PPT