阿里云物联网平台体验(树莓派+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-d...

第二步:安装阿里云平台的Python SDK

执行如下指令:$ pip install aliyun-python-sdk-iot-client

第三步:代码编写

在阿里云平台的说明文档:https://www.yuque.com/cloud-d... 中已经提供了一个示例代码,不过功能相对简单,就是把两个随机数送到云端。

我们设计一个相对复杂的场景,我们首先要实现双向通信,不仅仅把传感器数据送到云端,我们还要让云端下发一个指令,控制相关的设备。

上传数据我们选择一个真实的传感器 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/a...)。

由于代码比较多,所以我们封装为一个函数,并且可以同时返回两个值,一个是温度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:continuewhile GPIO.input(dht_pin) == GPIO.HIGH:continuewhile j < 40:k = 0while GPIO.input(dht_pin) == GPIO.LOW:continuewhile GPIO.input(dht_pin) == GPIO.HIGH:k += 1if k > 100:breakif k < 8:data.append(0)else:data.append(1)     j += 1humidity_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 = 0humidity_point = 0temperature = 0temperature_point = 0check = 0for 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_pointif check == tmp:return temperature,humidityelse: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语言,就可以轻松编写物联网代码了。

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

  1. 阿里云物联网平台python开发手册_阿里云物联网平台体验(树莓派+Python篇)

    虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作.但是同时也见证了阿里云物联网团队从几十人到数百人的迅速扩张,其物 ...

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

    2018年12月04日 11:35:08 叶帆 阅读数:349 虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作. ...

  3. 阿里云物联网平台体验(NetGadgeteer+C#篇)

    目前对接阿里云物联网平台有多种软件和硬件,可以有多种不同语言来实现对接,比如c/c++,Java,JS,Python,C#等等,不过C#版本只有PC对接云平台的代码,嵌入式的目前还没有看到,所以本篇文 ...

  4. 树莓派CM4 Sensing(包含485接口)+python+继电器+水质仪+阿里云物联网平台ito实现实时检测水质并上传数据到阿里云ito和远程控制灯光

    一.硬件设备 1.树莓派CM4 Sensing(包含485接口) 2.带485接口的继电器 继电器的mdobus指令 3.水质仪 水质仪线路需要改造一下 下图中1是水质仪自带的线,2是给水质仪提供电源 ...

  5. 树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制

    树莓派mqtt协议连接阿里云物联网平台(三) 前面树莓派的数据已经上传到云端,可是我的android手机该如何获取树莓派上传的这些数据呢,,困惑了我好几天的疑问,解开的那一刻,真的时拨开云雾见青天啊. ...

  6. 利用rfcomm实现树莓派与手机通信_工业物联网 | 怎么用NodeRed实现树莓派与阿里云物联网平台通信?虹科告诉你!...

    想获取更多IIOT干货 请点击蓝字,关注我们 虹科工业树莓派 高性能 多接口 宽温--适应恶劣环境 ★★★★★ Node-RED是构建物联网(IoT)应用程序的强大工具,它使用可视化的编程方法,允许开 ...

  7. Python模拟智能开关设备MQTT接入阿里云物联网平台 - PyCharm paho.mqtt

    概要 Python 使用 paho.mqtt 库,利用阿里云物联网平台的设备证书:productKey.deviceName.deviceSecret,自动合成 userName.passWord.以 ...

  8. 阿里云物联网平台数据解析(python)

    阿里云物联网平台数据解析(python) DTU上传设备返回报文消息,通过数据解析后显示各功能数值,这里以智能电表DLT645规约为例进行解析 因为是做光伏的,所以对电表的需求比较多,之前查找了好多文 ...

  9. 利用PYTHON连接阿里云物联网平台

    语言:python 3.7 环境:windows 10 实例:公共实例(免费) 阿里云的官方文档只有C语言和Linux环境,因此自我探索出利用PYTHON连接阿里云物联网平台的方法和步骤. 概述 - ...

最新文章

  1. Java中深浅拷贝之List
  2. [转]英语飙升的好方法
  3. 用Javascript隐藏超级链接的真实地址
  4. 跟踪分析Linux内核5.0系统调用处理过程
  5. Visual Studio 2005 Beta 2 will ship on April 25th
  6. 微型计算机dec al,微机原理复习知识点
  7. 温州大学《机器学习》课程课件(八、集成学习)
  8. 【资源】首发:徐亦达老师的机器学习课件及下载(中文目录)
  9. ubuntu10.04 android编译问题
  10. 两台主机经过路由器传送数据的网络原理
  11. (六)Redis集群搭建
  12. 文件格式、后缀名、图片格式详解
  13. android soundpool 封装,Android 音频播放之SoundPool的使用和封装
  14. mybatis批量删除 java_Mybatis批量删除数据操作方法
  15. 如何 接收消息服务器url,(读书笔记)网络是怎样连接的——浏览器生成消息...
  16. 甘超波:什么是个人定位
  17. 计算机水平二级指什么,全国计算机二级是什么
  18. 解决 libpng warning: iCCP: known incorrect sRGB profile
  19. android修改自动背光,android 背光控制
  20. openwrt编译smartdns_老大静态编译openwrt平台mipsel_24kc架构的smartdns时报错,求救!...

热门文章

  1. libcurl Get json 数据 接收全部的数据
  2. c++中的运算符重载---知识点:运算符重载函数,友元函数,函数重载
  3. Python爬虫之puppeteer之遇到的bug及解决方法
  4. C#MessageBox.Show报错,无法识别函数
  5. python学习—python中的引用本质
  6. iOS -转载-开发之个人开发者账号转公司开发者账号
  7. SpringBoot解决redirect参数中文乱码问题
  8. Codeforces 570D Tree Requests(树上启发式合并)
  9. bzoj 4184 shallot 时间线建线段树+vector+线性基
  10. POJ 2186 Popular Cows(Tarjan)