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

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

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

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

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

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

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

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 灯模块,通过云端下达的指令,控制灯亮和灯灭。

树莓派的管脚定义图如下 :

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

DHT11 模块共 3 根线,属于单总线通信,电源线我们接入 5V-4pin ,地线我们接入 GND-6pin ,通信 pin 我们接入 GPIO16-36pin 。 LED 模块也是 3 根线,我们电源线接入 3V3-1pin ,地线接入 GND-9pin ,控制线接入 GPIO4-7pin 。

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

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 )。

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

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

进群“960410445 ”即可获取数十套PDF以及大量的学习源码!

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

这个定义好后,我们创建设备,并且获取设备的三元组。由于官方提供的示例仅仅是模拟数据,并且是单向上传,我们需要改造一下。

在 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 的值,我们开灯或者关灯。

相关代码修改好后,我们就可以上传到树莓派设备,开始运行了,如下图所示:

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

这个时候我们查看云端设备的状态,会发现数据已经正常上传到云端了。

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

我们在云端产品的在线调试面板进行数据下发测试

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

我们发送 0 或 1 ,会发现 LED 灭或亮了。

以上,我们会发现通过我们所熟悉的 Python 语言,就可以轻松编写物联网代码了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。。但是,你并不需要知道这些技术细节,因为Python 的
文章目录 12 绘图实例(4) Drawing example(4)1. Scatterplot with varying point sizes and hues(relplot)2. Scatterplot with categorical variables(swarmplot)3. Scat
文章目录 10 绘图实例(2) Drawing example(2)1. Grouped violinplots with split violins(violinplot)2. Annotated heatmaps(heatmap)3. Hexbin plot with marginal dist
文章目录 9 绘图实例(1) Drawing example(1)1. Anscombe’s quartet(lmplot)2. Color palette choices(barplot)3. Different cubehelix palettes(kdeplot)4. Distribution
Python装饰器教程展示了如何在Python中使用装饰器基本功能。 文章目录 1 使用教程1.1 Python装饰器简单示例1.2 带@符号的Python装饰器1.3 用参数修饰函数1.4 Python装饰器修改数据1.5 Python多层装饰器1.6 Python装饰器计时示例 2 参考 1 使
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。 Windows: 不需要安装其他模块。OS X: sudo pip3
文章目录 生成文件目录结构多图合并找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果。可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度。效果如下: root:[z:/] |--a.py |--image | |--cat1.jpg | |--cat2.jpg |
文章目录 VENN DIAGRAM(维恩图)1. 具有2个分组的基本的维恩图 Venn diagram with 2 groups2. 具有3个组的基本维恩图 Venn diagram with 3 groups3. 自定义维恩图 Custom Venn diagram4. 精致的维恩图 Elabo
mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用。入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course/index.html mxnet安装方法:pip install mxnet 1 在mxnet中使
文章目录 1 安装2 快速入门2.1 基本用法2.2 输出图像格式2.3 图像style设置2.4 属性2.5 子图和聚类 3 实例4 如何进一步使用python graphviz Graphviz是一款能够自动排版的流程图绘图软件。python graphviz则是graphviz的python实