树莓派数据上传阿里云

本贴最后更新于 343 天前,其中的信息可能已经事过景迁

前言

之前用的都是华为云,最近有个朋友需要将树莓派采集的 dht11、BH1750 数据上传到阿里云,所以边学边做吧。

阿里云设置

创建产品和设备

参考阿里官方教程

创建产品和对应设备并获取设备证书_物联网应用开发-阿里云帮助中心 (aliyun.com)

1.2 定义产品物模型

参考阿里官方教程

物联网应用开发如何为产品定义物模型_物联网应用开发-阿里云帮助中心 (aliyun.com)

树莓派设置

镜像烧录(开启 SSH、设置 wifi 名称和密码)

阿里云有教程,但是没说连接 wifi 和 ssh 的问题

注意:记得按照教程,开启 SSH 并配置 wifi,待会有用

使用树莓派(以下方案任选,只要能控制树莓派就行)

  • 最简单的方案:给树莓派外接键盘、鼠标、显示器;把树莓派当成一台电脑使用

  • 用 VScode 的 remote ssh

    VSCODE 远程开发树莓派_vscode ssh orangepi-CSDN 博客

    连接后,直接将文件拖进 VScode 中树莓派的文件夹即可

  • 其它(mobaxterm、putty 等等)

传感器及代码

温湿度传感器

参考阿里教程

将树莓派设备接入物联网平台实现数据上报_物联网应用开发-阿里云帮助中心 (aliyun.com)

如何通过温湿度传感器搜集环境数据_物联网应用开发-阿里云帮助中心 (aliyun.com)

前提条件

已完成本文上述工作

硬件连接

  1. 准备 DHT11 传感器设备。

    image

    ​​

  2. 将传感器接入到树莓派的主板。

    传感器拥有四个引脚,从左往右依次是 VCC 供电、数据、空、GND 负极。由于数据脚需要上拉电平支持,所以我们需要使用一个额外的 10 KΩ 电阻连接 VCC 与数据管脚,具体连接如下图。

    ​​image​​

    ​​image​​

    注意:有些 dht11 只有三个引脚,这和四个引脚的 dht11 没有区别!因为四引脚的 dht11,有个脚是 NC(没有用,不用接) ,三个引脚的图片如下:

    56f39974078f29aefa1178e4896c7a3

安装依赖程序

传感器的数据传递功能需要安装依赖程序开启。

  1. 在 bash 执行以下命令,完成程序安装。
cd /home/pi/Desktop
sudo apt update
sudo apt install git
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python3 setup.py install
cd /
sudo python3 -m pip install --force-reinstall paho-mqtt -i https://mirrors.aliyun.com/pypi/simple/
#备注(只是解释一下):
#cd /home/pi/Desktop进入目录/home/pi/Desktop,这是进入树莓派的桌面;
#pi指的是用户名,要看你自己的用户名
#sudo apt update是更新系统
#sudo apt install git安装git
#git clone https://github.com/adafruit/Adafruit_Python_DHT.git从国外仓库下载代码,下载好一次就行了
#cd Adafruit_Python_DHT进入目录,这个目录就是刚才从国外下载的仓库代码
#sudo python3 setup.py install执行仓库里的setup.py程序
#cd /回到顶层目录
  1. 继续 bash 执行以下命令,测试传感器是否已经工作正常。
python3
import Adafruit_DHT
humidity, temperature = Adafruit_DHT.read_retry(11, 4)
humidity,temperature
如果传感器连接并且工作正常,会返回正确的温度与湿度数据。

​​image​​

程序解读(run.py)

完整程序(直接放到树莓派即可使用):code_xianyu.zip

  • 导入库(run.py)
#!/usr/bin/python3
import aliLink,mqttd,rpi
import time,json
import Adafruit_DHT
  • 三元素(iot 后台获取)(run.py)
ProductKey = '***'

DeviceName = 'raspberrypi4-******'

DeviceSecret = "assef***"
  • topic (iot 后台获取)(run.py)
POST = '/sys/***/raspberrypi4-***/thing/event/property/post'  # 上报消息到云

POST_REPLY = '/sys/***/raspberrypi4-***/thing/event/property/post_reply'

SET = '/sys/***/raspberrypi4-***/thing/service/property/set'  # 订阅云端指令
  • 消息回调(云端下发消息的回调函数)(run.py)
def on_message(client, userdata, msg):

  # print(msg.payload)

  Msg = json.loads(msg.payload)

  switch = Msg['params']['PowerLed']

  rpi.powerLed(switch)

  print(msg.payload)  # 开关值
  • 连接回调(与阿里云建立链接后的回调函数)(run.py)
def on_connect(client, userdata, flags, rc):

  pass
  • 链接信息(run.py)
Server, ClientId, userNmae, Password = aliLink.linkiot(DeviceName, ProductKey, DeviceSecret)
  • mqtt 链接(run.py)
mqtt = mqttd.MQTT(Server, ClientId, userNmae, Password)

mqtt.subscribe(SET)   # 订阅服务器下发消息topic

mqtt.begin(on_message, on_connect)
  • 信息获取上报,每 10 秒钟上报一次系统参数(run.py)
while True:

  time.sleep(10)
  # 获取传感器信息
  humidity, temperature = Adafruit_DHT.read_retry(11, 4)
  # 构建与云端模型一致的消息结构

  updateMsn = {
    'temperature': temperature,
    'humidity': humidity
  }
  JsonUpdataMsn = aliLink.Alink(updateMsn)
  print(JsonUpdataMsn)
  mqtt.push(POST, JsonUpdataMsn)   # 定时向阿里云IOT推送我们构建好的Alink协议数据

运行程序

在 bash 执行以下命令。

cd /home/pi/Desktop/code/
python3 run.py
  • 数据结果如图所示。

    ba19176d0c2132244ad060c0c637e06

  • 在 IoT 平台查询上报的数据。

    前往设备详情页,单击物模型数据 > 运行状态,查看新增的机房温度和湿度数据。

    接入后的效果图如下所示。

    07da898a3f037e993619b164e306266

光照传感器

基本设置

  • 连接硬件

    请按照下图连接

    image (3)

  • 开启 IIC

    在 bash 执行((会出现一个界面,需要手动选择)选择​******Interfacing Options高级设置将****I2C设置为****Enable**然后重启系统

    sudo raspi-config
    
  • 重启后对 IIC 进行测试,在 bash 执行

    sudo i2cdetect -y 1
    
  • 应该得到下图所示

    image

  • 安装依赖

    在 bash 执行(PS:注意看是否看装成功)

    sudo apt-get install python-smbus
    pip install smbus
    
  • 上传代码

    将代码文件,上传到树莓派

    code_xianyu.zip

程序解读

(记得去阿里云,新增物模型-光照强度, 参考前面的新建温湿度物模型)

image (1)

和之前的温湿度代码差不多,新增了 BH1750 函数(已封装),可以直接读取光照强度并上传,执行

cd code_xiyan#进入代码文件夹,路径要自己确认一下
python run.py

程序部分大同小异,就不细讲了

结果如下:

​​image (2)​​

  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...