虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作。但是同时也见证了阿里云物联网团队从几十人到数百人的迅速扩张,其物联网平台所承载的内容也急速膨胀,物联网开发套件基础版、飞凤、Link Develop一站式开发平台、物联网开发平台高级版、飞燕、飞象、城市大脑、农业大脑和工业互联平台不一而足……,很难有精力真正熟悉和了解阿里云的每一款物联网产品。

这次有幸成为物联网平台的阿里云MVP体验官,可以从另外一个角度来体验阿里云物联网平台了。最早我们都是基于MCU单片+.NET MF平台,直接采用MQTT协议实现相关的代码对接阿里云平台,虽然也可以基于组态配置很灵活地接入物联网平台,但是对一些WEB、AI和云端开发的人来说还是有些陌生。正是因为这些需求,JS,Java,Python这些高级语言已经走入了硬件开发,可以直接在MCU芯片上运行,大大提速了物联网云和端的连接工作。

本篇文章就是采用高级语言Python基于树莓派进行物联网云端对接的(后续篇幅会介绍nodejs的云端对接)。

下面是阿里云团队快递过来的相关测试硬件:

1、 树莓派3B+  自带wifi和蓝牙

2、 DHT11温湿度模块

3、 LED灯模块

第一步:我们需要为树莓派安装操作系统

第二步:安装阿里云平台的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)

由于代码比较多,所以我们封装为一个函数,并且可以同时返回两个值,一个是温度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 < 40:

k = 0

while GPIO.input(dht_pin) == GPIO.LOW:

continue

while GPIO.input(dht_pin) == GPIO.HIGH:

k += 1

if k > 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语言,就可以轻松编写物联网代码了。

本文相关的代码文件:alios_ht_all.py

作者:刘洪峰iot

原文链接

本文为云栖社区原创内容,未经允许不得转载。

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

  1. 阿里云物联网平台python开发手册_阿里云物联网平台之云端API调用(即云端开发教程)...

    本文介绍如何调用物联网平台的云端API,很多时候控制台上操作不太方便,需要通过API调用来完成或者通过调用API封装接口,以做到二次开发等.如产品管理,设备管理,规则创建等.分别介绍通过common ...

  2. linux python开发环境_如何在Linux系统中搭建Python编程环境

    1 在大多数的Linux系统中,基本上都默认安装了Python,也就是说,在Linux的系统中基本上是不需要安装什么软件,就可以使用Python. 下面以ubuntu操作系统为例,看看如何在Linux ...

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

    阿里云物联网平台体验(树莓派+Python篇) 虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作.但是同时也见证了 ...

  4. 【APPInventor\腾讯云】使用APPInventor开发连接腾讯云的安卓物联网遥控APP

    [APPInventor\腾讯云]使用APPInventor开发连接腾讯云的安卓物联网遥控APP 背景 需求分析 功能分析 数据链路 操作逻辑 实现方式\工具 具体实现 结语 背景 课程作业需要,教师 ...

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

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

  6. 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...

    很多人想学Python程序设计或者已经了解过一点Python程序设计基础,却没办法开发出一个项目. 今天,通过演示一个简单的控制台小游戏制作,手把手教你如何用Python编写一个游戏程序,即便你是个新 ...

  7. 普元eos开发手册_名词解释--统一应用(开发)平台Unified Application Platform

    国内有些企业项目开发当中,可能会遇到UAP的概念,UAP指的是Unified Application Platform,即统一应用平台. UAP,简单的理解,就是公司层面,统一的技术平台,涉及整个公司 ...

  8. python云计算服务_阿里云python 云计算

    阿里云python 云计算 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越.稳定可靠.弹性扩展的IaaS(Infrastructure as a Serv ...

  9. 阿里云大学python教程下载_阿里大学开放 11 门免费 Python 视频课程

    Python 语言近几年越来越火,语言使用率占比节节攀升. 我们知道Python 现在稳居世界编程语言前三名,在 PYPL 语言流行指数上更是稳居第一,可见 python 的适用范围.受众基础.影响力 ...

最新文章

  1. error: Error: No resource found for attribute ‘layout_scrollFlags’ in package‘包名’
  2. Java中获取域名、端口号、项目名等实现路径适配
  3. 【算法学习笔记】83.排序辅助 动态规划 SJTU OJ 1282 修路
  4. 微信小程序没登录跳到登录页怎么做_微信小程序手机端如何实现登录页面跳转含有Tabar页面...
  5. 读取无线手柄数据_《宇宙机器人》×PS5手柄使用体验:登月级进化
  6. 统信发布UOS V20 进军个人市场 生态日益完善
  7. PHP 函数调用跟踪
  8. PHP汉字转拼音的类
  9. 终于把结婚照片做成了MTV
  10. 无法读取内存属于错误吗_索佳全站仪错误信息讲解
  11. java.sql.ResultSet
  12. 局域网聊天 java_java实现简易局域网聊天功能
  13. java面试题:重写和重载的区别——详解
  14. PVC地板IMO船舶防火测试认证注意事项
  15. AS中的typo作用
  16. 码云Gitee WebHook Jenkins 403 err:No valid crumb was included in the request
  17. Google Drive资源下载(附DPED dataset百度云链接)
  18. vi编辑器基础命令合集与yim初级使用
  19. Unity3D 实现背包系统
  20. 开源软件新时代:55个经典开源Wind…

热门文章

  1. 移动三国己然鼎立,普​通开发者如何选择开发​平台?
  2. 简单汇编----输入密码判断正否
  3. 云技术概况:云计算的优点/特点/类型/服务模式
  4. 从命令行运行postman脚本
  5. Android开发人员不得不收集的代码(不断更新中...)
  6. Android Handler主线程和一般线程通信的应用分析
  7. Java继承时构造函数的关系
  8. MDK5.29,5.30,5.31,5.32,5.33和各种pack软件包镜像下载
  9. 如何清除windows安全中心病毒和威胁防护的保护历史记录
  10. 封杀所有Bytespider蜘蛛,太频繁,太操蛋,不杀不行~~~