前言
为了传输传感器数据,在网上找了很多方法,但都因为各种各样的问题最终没能成功实现。最终找到这个既简单,又方便实现的方法。步骤有点多,希望大家可以跟着教程,一步步耐心的做下去,愿大家都能成功实现数据传输。代码放在最后啦,下面开始我的教程。
一、创建Onenet账号
1.在浏览器里搜索“onenet",第一个就是
2.进入后点击右上角登录,第一次登陆的需要注册账号
二、创建产品
1.登陆后点击右上角的开发者中心
2.先点击产品开发,再点击创建产品
3.这里产品品类可以随便选,不影响功能
4.选择设备接入
5.用红色框起来的五个地方要和我一样,其他地方根据自己情况填
6.按确定后,产品就创建成功了,下面添加设备
这样设备就添加成功了
7.回到产品开发
8.点击右边的“设置物模型”,然后点击“添加自定义功能点”,以温湿度为例
(我这边把原本自带的功能点都删掉了,大家可以根据自己的实际需要增删)
三、生成SDK
1.点击新增后,按“保存”,会跳出如下页面,点击“前往设备开发”
2.点击“基于SDK开发”
3.点击“功能接口SDK获取”后,将自动生成并下载SDK
用户在平台端获取的设备SDK中,已包括平台根据设备所属产品的物模型自动生成的tm_user.c和tm_user.h文件(修改物模型后,会重新生成tm_user文件,需要重新获取新的SDK)!!!
4.如果在前面不小心将“前往设备开发”关掉,可以通过如下方式生成SDK
四、上传SDK至树莓派
1.下载好SDK后,将SDK传到树莓派上,这里给大家分享一个快速将电脑文件传给树莓派的方法
链接:https://pan.baidu.com/s/1j70vzNti_w7bxCOxp48HAg
提取码:mxkc
点击WinSCP应用程序
2.点击“编辑”,输入自己的IP,用户名和密码,然后点“登陆”
3.选择要上传的文件,右击点“上传”,这样文件将上传到树莓派中
五、修改SDK
1.用VNC打开树莓派
2.打开“main.c”文件,路径用红色框起来了
将自己的“TM_PRODUCT_ID”、“TM_DEVICE_NAME”、“TM_ACCESS_KEY”填入
3.在设备管理->设备详情中可以查看,对应代码中的信息我都标在旁边了
4.将获取传感器的代码放在和“main.c"一个文件夹里面,这里以DHT11温湿度传感器为例
DHT11.C
这里添加了”WiringPi"库,后面会教如何安装
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include "DHT11.h"
#include <stdint.h>
// 其他代码...
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
#define HIGH_TIME 32
int pinNumber = 29; //use gpio1 to read data
uint32 databuf;
uint64_t humi, temp;
void updateTemperatureAndHumidity() {
if (readSensorData()) {
humi= (databuf >> 24) & 0xff;
temp= (databuf >> 8) & 0xff;
printf("humi=%lld\n",humi);
printf("temp=%lld\n",temp);
} else {
humi = 0;
temp = 0;
printf("humi=%lld\n",humi);
printf("temp=%lld\n",temp);
}
}
uint8 readSensorData(void)
{
uint8 crc;
uint8 i;
pinMode(pinNumber, OUTPUT); // set mode to output
digitalWrite(pinNumber, 0); // output a high level
delay(25);
digitalWrite(pinNumber, 1); // output a low level
pinMode(pinNumber, INPUT); // set mode to input
pullUpDnControl(pinNumber, PUD_UP);
delayMicroseconds(27);
if (digitalRead(pinNumber) == 0) //SENSOR ANS
{
while (!digitalRead(pinNumber)); //wait to high
for (i = 0; i < 32; i++)
{
while (digitalRead(pinNumber)); //data clock start
while (!digitalRead(pinNumber)); //data start
delayMicroseconds(HIGH_TIME);
databuf *= 2;
if (digitalRead(pinNumber) == 1) //1
{
databuf++;
}
}
for (i = 0; i < 8; i++)
{
while (digitalRead(pinNumber)); //data clock start
while (!digitalRead(pinNumber)); //data start
delayMicroseconds(HIGH_TIME);
crc *= 2;
if (digitalRead(pinNumber) == 1) //1
{
crc++;
}
}
return 1;
}
else
{
return 0;
}
}
void cgq()
{
printf("Use GPIO1 to read data!\n");
if (-1 == wiringPiSetup()) {
printf("Setup wiringPi failed!");
exit(1);
}
pinMode(pinNumber, OUTPUT); // set mode to output
digitalWrite(pinNumber, 1); // output a high level
printf("Enter OS-------\n");
// while (1) {
pinMode(pinNumber, OUTPUT); // set mode to output
digitalWrite(pinNumber, 1); // output a high level
delay(3000);
updateTemperatureAndHumidity();
// }
}
DHT11.h
#ifndef DHT11_H
#define DHT11_H
#include <stdint.h>
typedef unsigned char uint8;
typedef unsigned long uint32;
extern int pinNumber;
extern uint32 databuf;
extern uint64_t humi, temp;
void updateTemperatureAndHumidity();
void cgq();
uint8 readSensorData(void);
#endif // DHT11_H
5.打开tm_user.h文件
可以看到运用了三种函数
我们目前只需要在主函数中调用上报函数
6.在CMakeLists.txt中添加路径
六、配置树莓派
1.安装WiringPi库
(这部分教程我参考了这篇博客)树莓派4B镜像安装、安装wiringpi库_怎么下载wringpi到树莓派-CSDN博客
链接:https://pan.baidu.com/s/1GpnqFeX1UjKOvgya2WuYtA
提取码:ncsk
提取WiringPi文件至树莓派的pi文件夹中
1)在终端输入
sudo apt-get upgrade
sudo apt-get update
如果下载速度慢的话按照下面步骤换源,正常的话就跳过下面换源步骤
换源,输入
sudo nano /etc/apt/sources.list
把之前的注释掉(前面加#),把这段加进去
deb https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bullseye main contrib non-free rpi
2)在终端进入WiringPI文件夹
cd WiringPi/
3)输入
sudo chmod 777 build
./build
4)输入
gpio -v
gpio readall
出现以下界面,恭喜你安装成功!
2.安装cmake
1)在终端输入
sudo apt-get update
sudo apt-get install cmake
2)在CMakeLists.txt文件夹的最后一行添加:
target_link_libraries(${CMAKE_PROJECT_NAME} wiringPi)
3)在编译器里添加编译指令
七、接引脚
白框(右边第一个)接正,蓝框(右边第三个)接负,紫框(右边最后一个)接out
八、编译
按照以下步骤在SDK文件的终端中输入
(此部分可以参考Onenet文档中心的文档)
OneNET - 中国移动物联网开放平台 (10086.cn)
mkdir build # 创建build文件夹
cd build # 进入build文件夹
cmake .. # 以../目录下的CMakeLists.txt生成makefile
make # 编译
./mqtts_onejson_soc #执行,以MQTT协议为例
如果如图所示,恭喜你传输成功啦!
九、Onenet查看传输数据
以上,树莓派获取传感器数据并上传至Onenet云平台就成功啦,下一篇我将介绍如何把Onenet云平台的数据传给微信小程序。
整体代码:
链接:https://pan.baidu.com/s/1G7Ck0QmPdVkEjfVUQlernA
提取码:vsdv
因为Onenet平台经历了版本更新,之前在找教程的时候经常因为是旧版的教程,导致不知道很多地方的入口在哪,硬是在一些小地方花费了很多时间。所以本篇博客把每一步都尽可能的写详细了,这可能也导致了全文有些冗长。这是我的第一篇博客,希望能够对大家有所帮助,欢迎指正!😊