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

前言

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

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值