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

相关实践学习
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
9月前
|
消息中间件 安全 物联网
海量接入、毫秒响应:易易互联携手阿里云构筑高可用物联网消息中枢
面对换电生态高速发展的通信挑战,易易互联通过采用阿里云 MQTT + RocketMQ 的融合解决方案,成功构建了“海量接入、实时响应、弹性处理、安全可信”的物联网通信底座。该架构不仅显著提升了系统稳定性与可扩展性,更保障了高并发场景下的业务连续性,为实现“让换电成为营运补能第一选择”的战略目标提供了坚实的技术支撑。
469 68
|
物联网
(手把手)在华为云、阿里云搭建自己的物联网MQTT消息服务器,免费IOT平台
本文介绍如何在阿里云搭建自己的物联网MQTT消息服务器,并使用 “MQTT客户端调试工具”模拟MQTT设备,接入平台进行消息收发。
3910 42
|
物联网 Python
请问:如何使用python对物联网平台上设备的属性进行更改?
为验证项目可行性,本实验利用阿里云物联网平台创建设备并定义电流、电压两个整型属性。通过Python与平台交互,实现对设备属性的控制,确保后续项目的顺利进行。此过程涵盖设备连接、数据传输及属性调控等功能。
|
机器学习/深度学习 人工智能 分布式计算
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
468 35
|
存储 监控 安全
工业物联网关应用:PLC数据通过智能网关上传阿里云实战
本文介绍如何使用智能网关将工厂PLC数据传输至阿里云平台,适合中小企业远程监控设备状态。硬件准备包括三菱FX3U PLC、4G智能网关和24V电源。接线步骤涵盖PLC编程口与网关连接、运行状态检测及天线电源接入。配置过程涉及通讯参数、阿里云对接和数据点映射。PLC程序关键点包括数据上传触发和温度值处理。阿里云平台操作包含实时数据查看、数据可视化和规则引擎设置。最后提供常见故障排查表和安全建议,确保系统稳定运行。
1554 1
|
物联网 数据挖掘 BI
基于阿里云物联网平台(IoT)的智能家居系统开发与部署
随着物联网技术的发展,智能家居成为提升生活品质的重要方向。阿里云物联网平台提供设备接入、数据管理及应用开发能力,支持亿级设备接入、高效数据管理和灵活应用开发,确保系统安全。本文通过实战案例展示如何基于该平台构建智能家居系统,涵盖设备接入、远程控制、场景联动与数据分析等功能,助力企业快速部署智能家居解决方案。
|
关系型数据库 数据库 数据安全/隐私保护
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
675 2
|
弹性计算 安全 开发工具
灵码评测-阿里云提供的ECS python3 sdk做安全组管理
批量变更阿里云ECS安全组策略(批量变更)
|
机器学习/深度学习 自然语言处理 API
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程。通过简单的代码示例,展示如何将文本转换为自然流畅的语音,适用于有声阅读、智能客服等场景。
5404 3

相关产品

  • 物联网平台
  • 推荐镜像

    更多