网站的关键词库怎么做的那么多,wordpress keywords不见,网络营销外包团队哪些好,wordpress链接数据库阿里云物联网平台体验(树莓派Python篇)
虽然对阿里云物联网平台比较熟悉了#xff0c;从一开始就有幸参与了飞凤平台#xff08;Link Develop 一站式开发平台的前身#xff09;的一些偏硬件接入的工作。但是同时也见证了阿里云物联网团队从几十人到数百人的迅速扩张#x…阿里云物联网平台体验(树莓派Python篇)
虽然对阿里云物联网平台比较熟悉了从一开始就有幸参与了飞凤平台Link Develop 一站式开发平台的前身的一些偏硬件接入的工作。但是同时也见证了阿里云物联网团队从几十人到数百人的迅速扩张其物联网平台所承载的内容也急速膨胀物联网开发套件基础版、飞凤、Link Develop一站式开发平台、物联网开发平台高级版、飞燕、飞象、城市大脑、农业大脑和工业互联平台不一而足……很难有精力真正熟悉和了解阿里云的每一款物联网产品。
这次有幸成为物联网平台的阿里云MVP体验官可以从另外一个角度来体验阿里云物联网平台了。最早我们都是基于MCU单片.NET MF平台直接采用MQTT协议实现相关的代码对接阿里云平台虽然也可以基于组态配置很灵活地接入物联网平台但是对一些WEB、AI和云端开发的人来说还是有些陌生。正是因为这些需求JSJavaPython这些高级语言已经走入了硬件开发可以直接在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) //设置为输出模式
点亮灯
span stylecolor:#f8f8f2code classlanguage-cGPIOspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74output/spanspan stylecolor:#f8f8f2(/spanled_pinspan stylecolor:#f8f8f2,/span GPIOspan stylecolor:#f8f8f2./spanHIGHspan stylecolor:#f8f8f2)/span/code/span span stylecolor:#f8f8f2code classlanguage-cGPIOspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74output/spanspan stylecolor:#f8f8f2(/spanled_pinspan stylecolor:#f8f8f2,/span GPIOspan stylecolor:#f8f8f2./spanLOWspan stylecolor:#f8f8f2)/span/code/span DHT11相对比较复杂我2010年曾经写过一篇博文。 由于代码比较多所以我们封装为一个函数并且可以同时返回两个值一个是温度T一个是湿度H。
网上大部分Python的实例都是读一次温湿度的如果要连续读必须间隔3秒左右否则很容易失败。由于linux不是实时系统我们发现即使间隔3秒无法正确获取温湿度值的现象也时有发生并且有时候居然也有通过校验的错误值出现。
DHT11的数据Pin接入的是 GPIO16所以我们定义pin的代码如下
dht_pin 16
封装函数的代码如下
span stylecolor:#f8f8f2code classlanguage-cdef span stylecolor:#e6db74span stylecolor:#a6e22eGetDTH/span/spanspan stylecolor:#f8f8f2span stylecolor:#f8f8f2(/span/spanspan stylecolor:#f8f8f2span stylecolor:#f8f8f2)/span/spanspan stylecolor:#f8f8f2:/span data span stylecolor:#f8f8f2/span span stylecolor:#f8f8f2[/spanspan stylecolor:#f8f8f2]/spanj span stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff0/span/span GPIOspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74setup/spanspan stylecolor:#f8f8f2(/spandht_pinspan stylecolor:#f8f8f2,/span GPIOspan stylecolor:#f8f8f2./spanOUTspan stylecolor:#f8f8f2)/spanGPIOspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74output/spanspan stylecolor:#f8f8f2(/spandht_pinspan stylecolor:#f8f8f2,/span GPIOspan stylecolor:#f8f8f2./spanLOWspan stylecolor:#f8f8f2)/spantimespan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74sleep/spanspan stylecolor:#f8f8f2(/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff0.02/span/spanspan stylecolor:#f8f8f2)/spanGPIOspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74output/spanspan stylecolor:#f8f8f2(/spandht_pinspan stylecolor:#f8f8f2,/span GPIOspan stylecolor:#f8f8f2./spanHIGHspan stylecolor:#f8f8f2)/spanGPIOspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74setup/spanspan stylecolor:#f8f8f2(/spandht_pinspan stylecolor:#f8f8f2,/span GPIOspan stylecolor:#f8f8f2./spanINspan stylecolor:#f8f8f2)/spanspan stylecolor:#66d9efspan stylecolor:#f92672while/span/span GPIOspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74input/spanspan stylecolor:#f8f8f2(/spandht_pinspan stylecolor:#f8f8f2)/span span stylecolor:#f8f8f2/span GPIOspan stylecolor:#f8f8f2./spanLOWspan stylecolor:#f8f8f2:/spanspan stylecolor:#66d9efspan stylecolor:#f92672continue/span/spanspan stylecolor:#66d9efspan stylecolor:#f92672while/span/span GPIOspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74input/spanspan stylecolor:#f8f8f2(/spandht_pinspan stylecolor:#f8f8f2)/span span stylecolor:#f8f8f2/span GPIOspan stylecolor:#f8f8f2./spanHIGHspan stylecolor:#f8f8f2:/spanspan stylecolor:#66d9efspan stylecolor:#f92672continue/span/spanspan stylecolor:#66d9efspan stylecolor:#f92672while/span/span j span stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff40/span/spanspan stylecolor:#f8f8f2:/spank span stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff0/span/spanspan stylecolor:#66d9efspan stylecolor:#f92672while/span/span GPIOspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74input/spanspan stylecolor:#f8f8f2(/spandht_pinspan stylecolor:#f8f8f2)/span span stylecolor:#f8f8f2/span GPIOspan stylecolor:#f8f8f2./spanLOWspan stylecolor:#f8f8f2:/spanspan stylecolor:#66d9efspan stylecolor:#f92672continue/span/spanspan stylecolor:#66d9efspan stylecolor:#f92672while/span/span GPIOspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74input/spanspan stylecolor:#f8f8f2(/spandht_pinspan stylecolor:#f8f8f2)/span span stylecolor:#f8f8f2/span GPIOspan stylecolor:#f8f8f2./spanHIGHspan stylecolor:#f8f8f2:/spank span stylecolor:#f8f8f2/spanspan stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff1/span/spanspan stylecolor:#66d9efspan stylecolor:#f92672if/span/span k span stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff100/span/spanspan stylecolor:#f8f8f2:/spanspan stylecolor:#66d9efspan stylecolor:#f92672break/span/spanspan stylecolor:#66d9efspan stylecolor:#f92672if/span/span k span stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff8/span/spanspan stylecolor:#f8f8f2:/spandataspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74append/spanspan stylecolor:#f8f8f2(/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff0/span/spanspan stylecolor:#f8f8f2)/spanspan stylecolor:#66d9efspan stylecolor:#f92672else/span/spanspan stylecolor:#f8f8f2:/spandataspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74append/spanspan stylecolor:#f8f8f2(/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff1/span/spanspan stylecolor:#f8f8f2)/span j span stylecolor:#f8f8f2/spanspan stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff1/span/spanhumidity_bit span stylecolor:#f8f8f2/span dataspan stylecolor:#f8f8f2[/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff0/span/spanspan stylecolor:#f8f8f2:/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff8/span/spanspan stylecolor:#f8f8f2]/spanhumidity_point_bit span stylecolor:#f8f8f2/span dataspan stylecolor:#f8f8f2[/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff8/span/spanspan stylecolor:#f8f8f2:/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff16/span/spanspan stylecolor:#f8f8f2]/spantemperature_bit span stylecolor:#f8f8f2/span dataspan stylecolor:#f8f8f2[/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff16/span/spanspan stylecolor:#f8f8f2:/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff24/span/spanspan stylecolor:#f8f8f2]/spantemperature_point_bit span stylecolor:#f8f8f2/span dataspan stylecolor:#f8f8f2[/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff24/span/spanspan stylecolor:#f8f8f2:/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff32/span/spanspan stylecolor:#f8f8f2]/spancheck_bit span stylecolor:#f8f8f2/span dataspan stylecolor:#f8f8f2[/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff32/span/spanspan stylecolor:#f8f8f2:/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff40/span/spanspan stylecolor:#f8f8f2]/spanhumidity span stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff0/span/spanhumidity_point span stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff0/span/spantemperature span stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff0/span/spantemperature_point span stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff0/span/spancheck span stylecolor:#f8f8f2/span span stylecolor:#ae81ffspan stylecolor:#ae81ff0/span/spanspan stylecolor:#66d9efspan stylecolor:#f92672for/span/span i in span stylecolor:#e6db74range/spanspan stylecolor:#f8f8f2(/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff8/span/spanspan stylecolor:#f8f8f2)/spanspan stylecolor:#f8f8f2:/spanhumidity span stylecolor:#f8f8f2/spanspan stylecolor:#f8f8f2/span humidity_bitspan stylecolor:#f8f8f2[/spanispan stylecolor:#f8f8f2]/span span stylecolor:#f8f8f2*/span span stylecolor:#ae81ffspan stylecolor:#ae81ff2/span/span span stylecolor:#f8f8f2*/spanspan stylecolor:#f8f8f2*/span span stylecolor:#f8f8f2(/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff7/span/spanspan stylecolor:#f8f8f2-/spanispan stylecolor:#f8f8f2)/spanhumidity_point span stylecolor:#f8f8f2/spanspan stylecolor:#f8f8f2/span humidity_point_bitspan stylecolor:#f8f8f2[/spanispan stylecolor:#f8f8f2]/span span stylecolor:#f8f8f2*/span span stylecolor:#ae81ffspan stylecolor:#ae81ff2/span/span span stylecolor:#f8f8f2*/spanspan stylecolor:#f8f8f2*/span span stylecolor:#f8f8f2(/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff7/span/spanspan stylecolor:#f8f8f2-/spanispan stylecolor:#f8f8f2)/spantemperature span stylecolor:#f8f8f2/spanspan stylecolor:#f8f8f2/span temperature_bitspan stylecolor:#f8f8f2[/spanispan stylecolor:#f8f8f2]/span span stylecolor:#f8f8f2*/span span stylecolor:#ae81ffspan stylecolor:#ae81ff2/span/span span stylecolor:#f8f8f2*/spanspan stylecolor:#f8f8f2*/span span stylecolor:#f8f8f2(/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff7/span/spanspan stylecolor:#f8f8f2-/spanispan stylecolor:#f8f8f2)/spantemperature_point span stylecolor:#f8f8f2/spanspan stylecolor:#f8f8f2/span temperature_point_bitspan stylecolor:#f8f8f2[/spanispan stylecolor:#f8f8f2]/span span stylecolor:#f8f8f2*/span span stylecolor:#ae81ffspan stylecolor:#ae81ff2/span/span span stylecolor:#f8f8f2*/spanspan stylecolor:#f8f8f2*/span span stylecolor:#f8f8f2(/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff7/span/spanspan stylecolor:#f8f8f2-/spanispan stylecolor:#f8f8f2)/spancheck span stylecolor:#f8f8f2/spanspan stylecolor:#f8f8f2/span check_bitspan stylecolor:#f8f8f2[/spanispan stylecolor:#f8f8f2]/span span stylecolor:#f8f8f2*/span span stylecolor:#ae81ffspan stylecolor:#ae81ff2/span/span span stylecolor:#f8f8f2*/spanspan stylecolor:#f8f8f2*/span span stylecolor:#f8f8f2(/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff7/span/spanspan stylecolor:#f8f8f2-/spanispan stylecolor:#f8f8f2)/spantmp span stylecolor:#f8f8f2/span humidity span stylecolor:#f8f8f2/span humidity_point span stylecolor:#f8f8f2/span temperature span stylecolor:#f8f8f2/span temperature_pointspan stylecolor:#66d9efspan stylecolor:#f92672if/span/span check span stylecolor:#f8f8f2/span tmpspan stylecolor:#f8f8f2:/spanspan stylecolor:#66d9efspan stylecolor:#f92672return/span/span temperaturespan stylecolor:#f8f8f2,/spanhumidityspan stylecolor:#66d9efspan stylecolor:#f92672else/span/spanspan stylecolor:#f8f8f2:/spanprint span stylecolor:#a6e22espan stylecolor:#e6db74wrong/span/spanspan stylecolor:#66d9efspan stylecolor:#f92672return/span/span span stylecolor:#ae81ffspan stylecolor:#ae81ff0/span/spanspan stylecolor:#f8f8f2,/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff0/span/span /code/span
这些准备工作做好后我们要在云端定义相关产品和设备了。和阿里云官方示例不一样的是我们额外增加了一个属性LED具备读写能力枚举型变量0-表示关灯1-表示开灯 这个定义好后我们创建设备并且获取设备的三元组。由于官方提供的示例仅仅是模拟数据并且是单向上传我们需要改造一下。
在main函数里增加这句代码
span stylecolor:#f8f8f2code classlanguage-cclientspan stylecolor:#f8f8f2./spanon_message span stylecolor:#f8f8f2/span on_message/code/span
表示我们可以获取云端推送的信息。 我们云端推送的信息内容如下
span stylecolor:#f8f8f2code classlanguage-cspan stylecolor:#f8f8f2{/spanspan stylecolor:#a6e22espan stylecolor:#e6db74method/span/spanspan stylecolor:#f8f8f2:/spanspan stylecolor:#a6e22espan stylecolor:#e6db74thing.service.property.set/span/spanspan stylecolor:#f8f8f2,/spanspan stylecolor:#a6e22espan stylecolor:#e6db74id/span/spanspan stylecolor:#f8f8f2:/spanspan stylecolor:#a6e22espan stylecolor:#e6db74169885527/span/spanspan stylecolor:#f8f8f2,/spanspan stylecolor:#a6e22espan stylecolor:#e6db74params/span/spanspan stylecolor:#f8f8f2:/spanspan stylecolor:#f8f8f2{/spanspan stylecolor:#a6e22espan stylecolor:#e6db74LED/span/spanspan stylecolor:#f8f8f2:/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff1/span/spanspan stylecolor:#f8f8f2}/spanspan stylecolor:#f8f8f2,/spanspan stylecolor:#a6e22espan stylecolor:#e6db74version/span/spanspan stylecolor:#f8f8f2:/spanspan stylecolor:#a6e22espan stylecolor:#e6db741.0.0/span/spanspan stylecolor:#f8f8f2}/span/code/span
我们需要获取LED的值所以on_message函数我们要增加一些内容
span stylecolor:#f8f8f2code classlanguage-csetjson span stylecolor:#f8f8f2/span jsonspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74loads/spanspan stylecolor:#f8f8f2(/spanmsgspan stylecolor:#f8f8f2./spanpayloadspan stylecolor:#f8f8f2)/spanled span stylecolor:#f8f8f2/span setjsonspan stylecolor:#f8f8f2[/spanspan stylecolor:#a6e22espan stylecolor:#e6db74params/span/spanspan stylecolor:#f8f8f2]/spanspan stylecolor:#f8f8f2[/spanspan stylecolor:#a6e22espan stylecolor:#e6db74LED/span/spanspan stylecolor:#f8f8f2]/span
GPIOspan stylecolor:#f8f8f2./spanspan stylecolor:#e6db74output/spanspan stylecolor:#f8f8f2(/spanled_pinspan stylecolor:#f8f8f2,/spanspan stylecolor:#f8f8f2(/spanGPIOspan stylecolor:#f8f8f2./spanHIGH span stylecolor:#66d9efspan stylecolor:#f92672if/span/span ledspan stylecolor:#f8f8f2/spanspan stylecolor:#ae81ffspan stylecolor:#ae81ff1/span/span span stylecolor:#66d9efspan stylecolor:#f92672else/span/span GPIOspan stylecolor:#f8f8f2./spanLOW span stylecolor:#f8f8f2)/spanspan stylecolor:#f8f8f2)/span/code/span
根据led的值我们开灯或者关灯。 相关代码修改好后我们就可以上传到树莓派设备开始运行了如下图所示 这个时候我们查看云端设备的状态会发现数据已经正常上传到云端了。 我们在云端产品的在线调试面板进行数据下发测试 我们发送0或1会发现LED灭或亮了。
以上我们会发现通过我们所熟悉的Python语言就可以轻松编写物联网代码了。
本文相关的代码文件alios_ht_all.py 原文链接 本文为云栖社区原创内容未经允许不得转载。