当前位置:   article > 正文

用树莓派获取传感器数据通过Onenet云平台(物模型)传输至微信小程序(上)_onenet 物模型api

onenet 物模型api

前言

       为了传输传感器数据,在网上找了很多方法,但都因为各种各样的问题最终没能成功实现。最终找到这个既简单,又方便实现的方法。步骤有点多,希望大家可以跟着教程,一步步耐心的做下去,愿大家都能成功实现数据传输。代码放在最后啦,下面开始我的教程。

一、创建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"库,后面会教如何安装

  1. #include <wiringPi.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include "DHT11.h"
  5. #include <stdint.h>
  6. // 其他代码...
  7. typedef unsigned char uint8;
  8. typedef unsigned int uint16;
  9. typedef unsigned long uint32;
  10. #define HIGH_TIME 32
  11. int pinNumber = 29; //use gpio1 to read data
  12. uint32 databuf;
  13. uint64_t humi, temp;
  14. void updateTemperatureAndHumidity() {
  15. if (readSensorData()) {
  16. humi= (databuf >> 24) & 0xff;
  17. temp= (databuf >> 8) & 0xff;
  18. printf("humi=%lld\n",humi);
  19. printf("temp=%lld\n",temp);
  20. } else {
  21. humi = 0;
  22. temp = 0;
  23. printf("humi=%lld\n",humi);
  24. printf("temp=%lld\n",temp);
  25. }
  26. }
  27. uint8 readSensorData(void)
  28. {
  29. uint8 crc;
  30. uint8 i;
  31. pinMode(pinNumber, OUTPUT); // set mode to output
  32. digitalWrite(pinNumber, 0); // output a high level
  33. delay(25);
  34. digitalWrite(pinNumber, 1); // output a low level
  35. pinMode(pinNumber, INPUT); // set mode to input
  36. pullUpDnControl(pinNumber, PUD_UP);
  37. delayMicroseconds(27);
  38. if (digitalRead(pinNumber) == 0) //SENSOR ANS
  39. {
  40. while (!digitalRead(pinNumber)); //wait to high
  41. for (i = 0; i < 32; i++)
  42. {
  43. while (digitalRead(pinNumber)); //data clock start
  44. while (!digitalRead(pinNumber)); //data start
  45. delayMicroseconds(HIGH_TIME);
  46. databuf *= 2;
  47. if (digitalRead(pinNumber) == 1) //1
  48. {
  49. databuf++;
  50. }
  51. }
  52. for (i = 0; i < 8; i++)
  53. {
  54. while (digitalRead(pinNumber)); //data clock start
  55. while (!digitalRead(pinNumber)); //data start
  56. delayMicroseconds(HIGH_TIME);
  57. crc *= 2;
  58. if (digitalRead(pinNumber) == 1) //1
  59. {
  60. crc++;
  61. }
  62. }
  63. return 1;
  64. }
  65. else
  66. {
  67. return 0;
  68. }
  69. }
  70. void cgq()
  71. {
  72. printf("Use GPIO1 to read data!\n");
  73. if (-1 == wiringPiSetup()) {
  74. printf("Setup wiringPi failed!");
  75. exit(1);
  76. }
  77. pinMode(pinNumber, OUTPUT); // set mode to output
  78. digitalWrite(pinNumber, 1); // output a high level
  79. printf("Enter OS-------\n");
  80. // while (1) {
  81. pinMode(pinNumber, OUTPUT); // set mode to output
  82. digitalWrite(pinNumber, 1); // output a high level
  83. delay(3000);
  84. updateTemperatureAndHumidity();
  85. // }
  86. }

DHT11.h

  1. #ifndef DHT11_H
  2. #define DHT11_H
  3. #include <stdint.h>
  4. typedef unsigned char uint8;
  5. typedef unsigned long uint32;
  6. extern int pinNumber;
  7. extern uint32 databuf;
  8. extern uint64_t humi, temp;
  9. void updateTemperatureAndHumidity();
  10. void cgq();
  11. uint8 readSensorData(void);
  12. #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)在终端输入

  1. sudo apt-get upgrade
  2. 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)输入

  1. sudo chmod 777 build
  2. ./build

4)输入

  1. gpio -v
  2. gpio readall

出现以下界面,恭喜你安装成功!

2.安装cmake

1)在终端输入

  1. sudo apt-get update
  2. sudo apt-get install cmake

2)在CMakeLists.txt文件夹的最后一行添加:

target_link_libraries(${CMAKE_PROJECT_NAME} wiringPi)

3)在编译器里添加编译指令

七、接引脚

白框(右边第一个)接正,蓝框(右边第三个)接负,紫框(右边最后一个)接out

八、编译

按照以下步骤在SDK文件的终端中输入

(此部分可以参考Onenet文档中心的文档)

OneNET - 中国移动物联网开放平台 (10086.cn)

  1. mkdir build # 创建build文件夹
  2. cd build # 进入build文件夹
  3. cmake .. # 以../目录下的CMakeLists.txt生成makefile
  4. make # 编译
  5. ./mqtts_onejson_soc #执行,以MQTT协议为例

如果如图所示,恭喜你传输成功啦!

九、Onenet查看传输数据

以上,树莓派获取传感器数据并上传至Onenet云平台就成功啦,下一篇我将介绍如何把Onenet云平台的数据传给微信小程序。

整体代码:

链接:https://pan.baidu.com/s/1G7Ck0QmPdVkEjfVUQlernA 
提取码:vsdv


因为Onenet平台经历了版本更新,之前在找教程的时候经常因为是旧版的教程,导致不知道很多地方的入口在哪,硬是在一些小地方花费了很多时间。所以本篇博客把每一步都尽可能的写详细了,这可能也导致了全文有些冗长。这是我的第一篇博客,希望能够对大家有所帮助,欢迎指正!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/423163
推荐阅读
相关标签