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

简介: 采用高级语言Python基于树莓派进行物联网云端对接

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

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

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

下面是阿里云团队快递过来的相关测试硬件:
1.png
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灯模块,通过云端下达的指令,控制灯亮和灯灭。

树莓派的管脚定义图如下:
2.png
DHT11模块共3根线,属于单总线通信,电源线我们接入5V-4pin,地线我们接入GND-6pin,通信pin我们接入GPIO16-36pin。LED模块也是3根线,我们电源线接入3V3-1pin,地线接入GND-9pin,控制线接入GPIO4-7pin。
3.png
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)。
4.png
由于代码比较多,所以我们封装为一个函数,并且可以同时返回两个值,一个是温度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-表示开灯
5.png
这个定义好后,我们创建设备,并且获取设备的三元组。由于官方提供的示例仅仅是模拟数据,并且是单向上传,我们需要改造一下。

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

 

相关代码修改好后,我们就可以上传到树莓派设备,开始运行了,如下图所示:
6.png
这个时候我们查看云端设备的状态,会发现数据已经正常上传到云端了。
7.png
我们在云端产品的在线调试面板进行数据下发测试
8.png
我们发送0或1,会发现LED灭或亮了。

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

本文相关的代码文件:alios_ht_all.py
阿里云物联网平台链接:https://dev.iot.aliyun.com/sale?source=deveco_partner_yefan

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
6天前
|
弹性计算 安全 开发工具
灵码评测-阿里云提供的ECS python3 sdk做安全组管理
批量变更阿里云ECS安全组策略(批量变更)
|
1月前
|
机器学习/深度学习 自然语言处理 API
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程。通过简单的代码示例,展示如何将文本转换为自然流畅的语音,适用于有声阅读、智能客服等场景。
196 3
|
2月前
|
存储 边缘计算 物联网
阿里云物联网平台:推动万物互联的智能化解决方案
随着物联网技术的快速发展,阿里云物联网平台为企业提供了一体化的解决方案,包括设备接入、数据管理和智能应用等核心功能。平台支持海量设备接入、实时数据采集与存储、边缘计算,并具备大规模设备管理、高安全性和开放生态等优势。广泛应用于智能制造、智慧城市和智能家居等领域,助力企业实现数字化转型。
242 5
|
2月前
|
机器学习/深度学习 物联网 数据处理
C语言用于物联网更合适还是python
选择 C 语言还是 Python 作为物联网(IoT)开发的语言取决于多个因素,包括项目的性质、资源限制、性能需求以及开发团队的技能水平。C 语言性能优越,适合资源受限的嵌入式设备,能直接访问硬件,广泛应用于底层开发,但开发复杂且容易出错。Python 则以其简单的语法和丰富的库支持快速开发和原型制作,适合跨平台应用和数据处理,但性能较低,资源占用较大。根据项目需求,性能和资源要求高时选择 C 语言,需快速开发和易于维护时选择 Python。
|
4月前
|
数据可视化 物联网 区块链
探索Python中的数据可视化:使用Matplotlib和Seaborn绘制图表探索未来:区块链、物联网与虚拟现实的融合趋势与应用前景
【8月更文挑战第30天】本文旨在引导读者通过Python编程语言,利用Matplotlib和Seaborn库,轻松掌握数据可视化技术。文章以浅显易懂的语言,结合实用的代码示例,从基础的图表绘制到高级定制功能,逐步深入讲解如何在数据分析中运用这些工具。无论你是编程新手还是希望提升可视化技能的开发者,都能在这篇文章中找到有价值的信息,让你的数据“活”起来。
|
4月前
|
弹性计算 API 开发工具
揭秘Python与阿里云API的神秘邂逅!流式处理的魔法之旅,一场颠覆想象的技术盛宴!
【8月更文挑战第15天】在数字世界的广阔舞台上,Python与阿里云API的相遇,就像是一场命中注定的邂逅。它们携手共舞,为我们带来了流式处理的魔法之旅。本文将揭开这场神秘邂逅的面纱,带你领略Python与阿里云API之间的奇妙互动。让我们一起踏上这场颠覆想象的技术盛宴,探索流式处理的无限可能!
87 7
|
4月前
|
弹性计算 JSON 开发工具
"一键玩转阿里云ECS!Python大神揭秘:如何自动化创建镜像并跨地域复制,让你的云资源部署秒变高效达人!"
【8月更文挑战第14天】本文介绍如何使用Python与阿里云SDK自动化管理ECS镜像,包括创建镜像及跨地域复制,以优化云资源部署。首先安装`aliyun-python-sdk-ecs`并配置阿里云凭证。接着,通过Python脚本实现镜像创建与复制功能,简化日常运维工作并增强灾难恢复能力。注意权限及费用问题。
100 2
|
4月前
|
关系型数据库 数据库 数据安全/隐私保护
"告别繁琐!Python大神揭秘:如何一键定制阿里云RDS备份策略,让数据安全与效率并肩飞,轻松玩转云端数据库!"
【8月更文挑战第14天】在云计算时代,数据库安全至关重要。阿里云RDS提供自动备份,但标准策略难以适应所有场景。传统手动备份灵活性差、管理成本高且恢复效率低。本文对比手动备份,介绍使用Python自定义阿里云RDS备份策略的方法,实现动态调整备份频率、集中管理和智能决策,提升备份效率与数据安全性。示例代码演示如何创建自动备份任务。通过自动化与智能化备份管理,支持企业数字化转型。
114 2
|
4月前
|
机器学习/深度学习 传感器 物联网
使用Python实现深度学习模型:智能物联网与智能家居
【8月更文挑战第13天】 使用Python实现深度学习模型:智能物联网与智能家居
151 2
|
5月前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。

热门文章

最新文章

相关产品

  • 物联网平台