赞
踩
为了传输传感器数据,在网上找了很多方法,但都因为各种各样的问题最终没能成功实现。最终找到这个既简单,又方便实现的方法。步骤有点多,希望大家可以跟着教程,一步步耐心的做下去,愿大家都能成功实现数据传输。代码放在最后啦,下面开始我的教程。
1.在浏览器里搜索“onenet",第一个就是
2.进入后点击右上角登录,第一次登陆的需要注册账号
1.登陆后点击右上角的开发者中心
2.先点击产品开发,再点击创建产品
3.这里产品品类可以随便选,不影响功能
4.选择设备接入
5.用红色框起来的五个地方要和我一样,其他地方根据自己情况填
6.按确定后,产品就创建成功了,下面添加设备
这样设备就添加成功了
7.回到产品开发
8.点击右边的“设置物模型”,然后点击“添加自定义功能点”,以温湿度为例
(我这边把原本自带的功能点都删掉了,大家可以根据自己的实际需要增删)
1.点击新增后,按“保存”,会跳出如下页面,点击“前往设备开发”
2.点击“基于SDK开发”
3.点击“功能接口SDK获取”后,将自动生成并下载SDK
用户在平台端获取的设备SDK中,已包括平台根据设备所属产品的物模型自动生成的tm_user.c和tm_user.h文件(修改物模型后,会重新生成tm_user文件,需要重新获取新的SDK)!!!
4.如果在前面不小心将“前往设备开发”关掉,可以通过如下方式生成SDK
1.下载好SDK后,将SDK传到树莓派上,这里给大家分享一个快速将电脑文件传给树莓派的方法
链接:https://pan.baidu.com/s/1j70vzNti_w7bxCOxp48HAg
提取码:mxkc
点击WinSCP应用程序
2.点击“编辑”,输入自己的IP,用户名和密码,然后点“登陆”
3.选择要上传的文件,右击点“上传”,这样文件将上传到树莓派中
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中添加路径
(这部分教程我参考了这篇博客)树莓派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
出现以下界面,恭喜你安装成功!
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云平台的数据传给微信小程序。
整体代码:
链接:https://pan.baidu.com/s/1G7Ck0QmPdVkEjfVUQlernA
提取码:vsdv
因为Onenet平台经历了版本更新,之前在找教程的时候经常因为是旧版的教程,导致不知道很多地方的入口在哪,硬是在一些小地方花费了很多时间。所以本篇博客把每一步都尽可能的写详细了,这可能也导致了全文有些冗长。这是我的第一篇博客,希望能够对大家有所帮助,欢迎指正!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。