树莓派Pico采集数据通过NB-IoT联网自动上报到云平台

项目构思:

Raspberry Pi Pico 是一款低成本,高性能的微控制器开发板,选用它来做一些物联网连云的数据采集终端,是个不错的主意!小编先来抛砖引玉,展示一个“树莓派Pico采集数据和上报云平台”的物联网小项目。
本项目中,树莓派Pico通过SIM7020 NB-IoT模块连云服务器,获取天气网站的气候信息,同时采集pico上的温度或其他传感器数据上报到云服务器上,用户可以通过访问网页参考实时上报的Pico温度传感数据。

准备物料:

操作步骤:

1、硬件准备

按下图所示,把Pico-SIM7020X-NB-IoT模块焊接上排座或排针,然后接入Pico主板、电池、天线和NB-IoT卡:
Pico-SIM7020X-NB-IoT-connection.png

2、服务器网页部署

以 http://pico.wiki/esp-chart.php 为例。其软件框图大致如下图所示:
Pico-SIM7020-HTTP-Demo-2.png
1、服务器搭建php,mysql等环境,创建数据库文件,比如:

  • 数据库:example_esp_data
  • 密码:your_password
  • 用户名:your_username
  • 创建数据库表:

CREATE TABLE Sensor (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
value1 VARCHAR(10),
value2 VARCHAR(10),
value3 VARCHAR(10),
reading_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)

2、服务器端的php示例文件,有post-data.php 和 esp-chart.php

  • post-data.php:HTTP POST的API接口,SIM7020X模块可以通过调用此API接口,往服务器POST数据。
  • esp-chart.php:用户端访问的网页,可通过此页面获取到SIM7020X上传的最新数据,并通过图表展示出来。

3、Pico端软件设置

1、参考教程:Template:Raspberry Pi Pico Quick Start 选择在 Windows 或 树莓派 系统下运行MicroPython开发环境
(推荐选用Windows 开发环境,下文以Windows开发环境为例)。

2、下载Python例程:Pico-SIM7020X-NB-loT-HTTP.py ,代码部分预览如下:

  • HTTP GET部分:

def httpGetTest():
sendCMD_waitResp(“AT+CHTTPCREATE=\”http://api.seniverse.com\””) #Create HTTP host instance
sendCMD_waitResp(“AT+CHTTPCON=0”) #Connect server
sendCMD_waitRespLine(“AT+CHTTPSEND=0,0,\”/v3/weather/now.json?key=SwwwfskBjB6fHVRon&location=shenzhen&language=en&unit=c\””) #send HTTP request
waitResp()
sendCMD_waitResp(“AT+CHTTPDISCON=0”) #Disconnected from server
sendCMD_waitResp(“AT+CHTTPDESTROY=0”) #Destroy HTTP instance

  • HTTP POST部分:

def httpPostTest():
global i
i=i+1
sendCMD_waitResp(“AT+CHTTPCREATE=\”http://pico.wiki/post-data.php\””) #Create HTTP host instance
sendCMD_waitResp(“AT+CHTTPCON=0”) #Connect server
sendCMD_waitRespLine(“AT+CHTTPSEND=0,1,\”/post-data.php\”,4163636570743a202a2f2a0d0a436f6e6e656374696f6e3a204b6565702d416c6976650d0a557365722d4167656e743a2053494d434f4d5f4d4f44554c450d0a,\”application/x-www-form-urlencoded\”,”+str_to_hexStr(“api_key=tPmAT5Ab3j888&value1=”+str(temperature)+”&value2=”+str(ADC0_reading)+”&value3=”+str(i))) #send HTTP request
waitResp()
sendCMD_waitResp(“AT+CHTTPDISCON=0”) #Disconnected from server
sendCMD_waitResp(“AT+CHTTPDESTROY=0”) #Destroy HTTP instance

更多关于SIM7020X模组HTTP应用文档内容,请见:SIM7020_Series_HTTP_Application_Note_V1.02.pdf

3、把连接好 Pico-SIM7020X-NB-IoT 模块的Pico主板,通过USB连接到电脑上。

  • 运行Thonny软件,选择MicroPython(Raspberry Pi Pico),打开示例程序的路径。
  • 先点击Stop(序号1),最后点击Run(序号2)按钮,开始运行程序,可通过Shell窗口(序号3)查看运行结果,如下图所示:
  • Pico-SIM7020X-NB-IoT-Run-Code.png

4、你可以通过Thonny软件查看、修改、或者运行调试代码。

  • 如果代码最终敲定,想要脱机自动运行的话,可以选择 File -> Save as -> Raspberry Pi Pico,另存为 main.py。
    Pico-Save-as-main py.png

4、运行现象

运行Pico-SIM7020X-NB-loT-HTTP.py,则Pico可以开始通过HTTP GET 天气网站的天气信息,同时可以将Pico主板上的温度通过HTTP POST到pico.wiki上。
Pico-SIM7020X-NB-IoT-HTTP-GET-Result.png

此时,我们通过网页访问http://pico.wiki/esp-chart.php,网页可以以图表的形式直接展示出实时上传的数据。如下图所示:
Pico-SIM7020X-NB-IoT-HTTP-POST-Result.png

5、相关资料下载:

扩展思维

当然,上面只是一个简单的应用案例,其实用这套硬件还是可以做更多创意好玩的物联网应用的,比如通过MQTT,订阅注定,实现实时批量连云控制,或者批量上报。
小编抛了砖,读者是否看了有其他有趣好玩的想法,也可以留言分享给我们。

发表回复