阿里云物联网平台体验(树莓派+Python篇)

阿里云物联网平台体验(树莓派+python篇)
虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(link develop 一站式开发平台的前身)的一些偏硬件接入的工作。但是同时也见证了阿里云物联网团队从几十人到数百人的迅速扩张,其物联网平台所承载的内容也急速膨胀,物联网开发套件基础版、飞凤、link develop一站式开发平台、物联网开发平台高级版、飞燕、飞象、城市大脑、农业大脑和工业互联平台不一而足……,很难有精力真正熟悉和了解阿里云的每一款物联网产品。
这次有幸成为物联网平台的阿里云mvp体验官,可以从另外一个角度来体验阿里云物联网平台了。最早我们都是基于mcu单片+.net mf平台,直接采用mqtt协议实现相关的代码对接阿里云平台,虽然也可以基于组态配置很灵活地接入物联网平台,但是对一些web、ai和云端开发的人来说还是有些陌生。正是因为这些需求,js,java,python这些高级语言已经走入了硬件开发,可以直接在mcu芯片上运行,大大提速了物联网云和端的连接工作。
本篇文章就是采用高级语言python基于树莓派进行物联网云端对接的(后续篇幅会介绍nodejs的云端对接)。
下面是阿里云团队快递过来的相关测试硬件:
1、 树莓派3b+  自带wifi和蓝牙
2、 dht11温湿度模块
3、 led灯模块
第一步:我们需要为树莓派安装操作系统
我们安装的是raspbian固件,可以按如下链接介绍的步骤进行安装:https://www.yuque.com/cloud-dev/iot-tech/ig269q
第二步:安装阿里云平台的python sdk
执行如下指令:$ pip install aliyun-python-sdk-iot-client
第三步:代码编写
在阿里云平台的说明文档:https://www.yuque.com/cloud-dev/iot-tech/rz6fpl 中已经提供了一个示例代码,不过功能相对简单,就是把两个随机数送到云端。
我们设计一个相对复杂的场景,我们首先要实现双向通信,不仅仅把传感器数据送到云端,我们还要让云端下发一个指令,控制相关的设备。
上传数据我们选择一个真实的传感器 dht11,可以获取温度和湿度值。另外还有一个led灯模块,通过云端下达的指令,控制灯亮和灯灭。
树莓派的管脚定义图如下:
dht11模块共3根线,属于单总线通信,电源线我们接入5v-4pin,地线我们接入gnd-6pin,通信pin我们接入gpio16-36pin。led模块也是3根线,我们电源线接入3v3-1pin,地线接入gnd-9pin,控制线接入gpio4-7pin。
led的控制相对容易,就是控制管脚的高低电平即可。
led_pin = 4                       //gpio为4
gpio.setmode(gpio.bcm)            //bcm的gpio定义
gpio.setup(led_pin, gpio.out)     //设置为输出模式
点亮灯:
gpio.output(led_pin, gpio.high)
gpio.output(led_pin, gpio.low)
dht11相对比较复杂,我2010年曾经写过一篇博文,想了解比较深入的可以参考一下(相关链接:https://blog.csdn.net/yfiot/article/details/5996524)。
由于代码比较多,所以我们封装为一个函数,并且可以同时返回两个值,一个是温度t,一个是湿度h。
网上大部分python的实例都是读一次温湿度的,如果要连续读,必须间隔3秒左右,否则很容易失败。由于linux不是实时系统,我们发现即使间隔3秒,无法正确获取温湿度值的现象也时有发生,并且有时候居然也有通过校验的错误值出现。
dht11的数据pin接入的是 gpio16,所以我们定义pin的代码如下:
dht_pin =16
封装函数的代码如下:
def getdth():          data = []        j = 0         gpio.setup(dht_pin, gpio.out)        gpio.output(dht_pin, gpio.low)        time.sleep(0.02)        gpio.output(dht_pin, gpio.high)        gpio.setup(dht_pin, gpio.in)                 while gpio.input(dht_pin) == gpio.low:          continue        while gpio.input(dht_pin) == gpio.high:          continue                 while j  100:              break          if k < 8:            data.append(0)          else:            data.append(1)               j += 1                 humidity_bit = data[0:8]        humidity_point_bit = data[8:16]        temperature_bit = data[16:24]        temperature_point_bit = data[24:32]        check_bit = data[32:40]                 humidity = 0        humidity_point = 0        temperature = 0        temperature_point = 0        check = 0                 for i in range(8):          humidity += humidity_bit[i] * 2 ** (7-i)          humidity_point += humidity_point_bit[i] * 2 ** (7-i)          temperature += temperature_bit[i] * 2 ** (7-i)          temperature_point += temperature_point_bit[i] * 2 ** (7-i)          check += check_bit[i] * 2 ** (7-i)                 tmp = humidity + humidity_point + temperature + temperature_point        if check == tmp:          return temperature,humidity        else:          print wrong          return 0,0
这些准备工作做好后,我们要在云端定义相关产品和设备了。和阿里云官方示例不一样的是,我们额外增加了一个属性led,具备读写能力,枚举型变量,0-表示关灯,1-表示开灯
这个定义好后,我们创建设备,并且获取设备的三元组。由于官方提供的示例仅仅是模拟数据,并且是单向上传,我们需要改造一下。
在main函数里,增加这句代码:
client.on_message = on_message
表示我们可以获取云端推送的信息。
我们云端推送的信息内容如下:
{method:thing.service.property.set,id:169885527,params:{led:1},version:1.0.0}
我们需要获取led的值,所以on_message函数我们要增加一些内容:
setjson = json.loads(msg.payload)    led = setjson['params']['led']gpio.output(led_pin,(gpio.high if led==1 else gpio.low ))
根据led的值,我们开灯或者关灯。
相关代码修改好后,我们就可以上传到树莓派设备,开始运行了,如下图所示:
这个时候我们查看云端设备的状态,会发现数据已经正常上传到云端了。
我们在云端产品的在线调试面板进行数据下发测试
我们发送0或1,会发现led灭或亮了。
以上,我们会发现通过我们所熟悉的python语言,就可以轻松编写物联网代码了。

LabVIEW中的动态事件
赋能“AI+行业”应用!广州高企高质量发展对接会(人工智能场景供需对接专场)成功举办
酒精耐磨测试仪的用途及其特点的说明
基于Dragonboard 410c使用红外探测人体运动情况
关于音频范围及其子集的基础知识
阿里云物联网平台体验(树莓派+Python篇)
比亚迪新能源汽车推进哥伦比亚电动乘用车发展
2020年我国工业互联网将成推动国民经济增长的关键动力
RFMD推出新型RF1604单极四投(SP4T)开关
工业使用的蓝牙技术有什么优点
有源蜂鸣器电路图驱动与蜂鸣器代码编程-臻美智能电子
跟随大股东乐视,巨亏24亿、裁员、被停牌的酷派地位岌岌可危,酷派该何去何从?
物联网芯片现在有多重要
两线制流量计变送器与流量计及流量计系统的原理及设计
下一代无线局域网系统的特点及应用研究
嵌入式系统已成为当下最热门的技术之一
莱姆的数字输出开环霍尔效应电流传感器已完善升级
防水变压器跟防雨变压器的区别在哪里?
瑞萨与力晶宣布其合资的闪存研发终结
Azure RTOS如何赋能嵌入式物联网的发展