前言:互联网 物联网 现在发展都很快,快到几天不看跟不上。
假想一个场景:厨房有个烟雾传感器,一旦触发报警惊天动地,但是主人不在家呢?并不是所有传感器都联到了物业中心,也不是所有物业中心都有人值班,不是所有值班人员都在岗位。。。可悲吧。如果这个传感器可以向微信推送消息呢?
一般来说成套智能家居系统都支持各种传感器,但是一个套餐下来上万元都轻轻松松。我就想要一个烟感报警而已,非要吃全套吗?
于是乎各种 MQTT 平台都能接入各种 带网络功能的 单片机。可是例程都是比较复杂,移植些许麻烦,考虑到开发平台和库的版本更新,网上很多文章copy回来,一次成功还是很难的。。。
其实吧,几乎所有智能控制都是基于“服务器网址+参数” 来实现的,仔细看看物联网平台的说明,找到正确的地址不难。至于参数往往注册账号后会给的。
----------------------------------------------------------------------------------------------------------------
下面进行一个简单实验:
请严格按照步骤来,别急问为什么,回头慢慢想。
1、注册 巴法云 账号并登陆 (实验性质免费的)
获得 私钥 / UID 一枚 大概是 569b708650b8888888888888 这样一连串
2、新建一个 主题 / topic DHT22 (选TCP创客云,其他的大同小异,回头自己摸吧)
3、绑定微信 (放心免费的,实在担心用没有开通支付功能的小号吧)
请仔细阅读官方文档几小时。。。这个跳过,回头补课
把以下网址粘贴到浏览器
https://api.bemfa.com/api/device/v1/data/1/push/get/?uid=569b708650b8888888888888&topic=DHT22&wemsg=微信&msg=24.45 ℃
浏览器会反馈一行 “{"code":"40010","status":"sendok"}”
仔细看,这个网址就是以 ?分割的两段,前面是服务器网址,后面是参数,多个参数以 & 连接。
这样先实现了微信消息发送,至于单片机,看看http例程也就差不多了。
至于不会把自己的 UID topic 替换上面红色部分的也就放弃吧,虽说简单还是需要点悟性。
----------------------------------------------------------------------------------------------------------------
以 micropython 为例,先运行例程看到 DHT22 温度,并能成功联网(两个例程胶水一下)。什么,还不行? 继续折腾,直到正常为止,不然后面玩什么。
引用什么的略,仅仅写下 while 里面的部分
while True:
d = dht.DHT22(machine.Pin(5))
d.measure()
print( d.temperature() , d.humidity() )
dht_temp = d.temperature() # d.temperature() 虽然结果是浮点,但是本身是个方法,不能直接 str() ,先赋值给一个变量,再str()。。。相当折腾
dht_hum = d.humidity()
sdht_temp = str(dht_temp)
sdht_hum = str(dht_hum)
print(sdht_temp,sdht_hum) // 输出和上面一样,但是内涵不同了
payload = 'https://api.bemfa.com/api/device/v1/data/1/push/get/?uid=569b708650b8888888888888&topic=DHT22&wemsg=weixin&msg='
payload += 'temperatures:' + sdht_temp + ' humidity:' + sdht_hum
print(payload)
response = urequests.get(payload)
print(response.text)
utime.sleep(60) # 不要太频繁,避免过量使用账号被停用
跑起来之后,我的手机每分钟提示一下。。。虽然还是有漏收的