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

news2024/11/18 4:42:44

前言

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1573623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu系统安装systemc-2.3.4流程

背景&#xff1a;systemC编程在linux下的基础环境配置 1&#xff0c;下载安装包&#xff0c;并解压 &#xff08;先下载了最新的3.0.0&#xff0c;安装时候显示sc_cmnhdr.h:115:5: error: #error **** SystemC requires a C compiler version of at least C17 **** &#xff…

idea开发 java web 高校学籍管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 高校学籍管理系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 css jq…

【云计算】云数据中心网络(一):VPC

云数据中心网络&#xff08;一&#xff09;&#xff1a;VPC 1.什么是 VPC2.VPC 的组成2.1 虚拟交换机2.2 虚拟路由器 3.VPC 网络规划3.1 VPC 数量规划3.2 交换机数量规划3.3 地址空间规划3.4 不同规模企业地址空间规划实践 4.VPC 网络高可靠设计4.1 单地域单可用区部署4.2 单地…

【鸿蒙 HarmonyOS】@ohos.promptAction (弹窗)

一、背景 创建并显示文本提示框、对话框和操作菜单。 文档地址&#x1f449;&#xff1a;文档中心 说明 本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 该模块不支持在UIAbility的文件声明处使用&#xff0c;即…

Premiere Pro 2024:赋予创意翅膀,让你的视频飞翔 mac/win版

Premiere Pro 2024&#xff0c;作为Adobe旗下的旗舰视频编辑软件&#xff0c;自推出以来&#xff0c;一直在视频制作领域占据着重要的地位。随着技术的不断进步和创新&#xff0c;Premiere Pro 2024为用户带来了前所未有的编辑体验&#xff0c;重新定义了视频制作的标准。 Pre…

爬虫 新闻网站 以湖南法治报为例(含详细注释) V1.0

目标网站&#xff1a;湖南法治报 爬取目的&#xff1a;为了获取某一地区更全面的在湖南法治报已发布的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 环境&#xff1a;Pycharm2021&#xff0c;Python3.10&#xff0c; 安装的包&#xff1a;requests&#xff0c;csv&#xff…

刷题之Leetcode283题(超级详细)

283.移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nu…

深度剖析鞋服品牌商品数字化管理的重要性

随着信息技术的迅猛发展与市场竞争的加剧&#xff0c;鞋服品牌商品数字化管理的重要性愈发凸显。数字化管理不仅关乎企业运营效率的提升&#xff0c;更是品牌实现差异化竞争、提升顾客体验、构建智慧零售生态的关键所在。对于鞋服品牌企业而言&#xff0c;提升商品数字化管理的…

P2089 烤鸡、P1706 全排列问题、P1157 组合的输出、P1036 [NOIP2002 普及组] 选数——Python代码实现(带注释)

P2089 烤鸡 题目背景 猪猪 Hanke 得到了一只鸡。 题目描述 猪猪 Hanke 特别喜欢吃烤鸡&#xff08;本是同畜牲&#xff0c;相煎何太急&#xff01;&#xff09;Hanke 吃鸡很特别&#xff0c;为什么特别呢&#xff1f;因为他有 1010 种配料&#xff08;芥末、孜然等&#xf…

面试经典150题——K 个一组翻转链表

1. 题目描述 2. 题目分析与解析 在这里推荐大家看一下这个解题思路&#xff1a; https://www.bilibili.com/video/BV11w411V7Ar/?spm_id_from333.337.search-card.all.click&vd_source7ea7c036902f5cb73c7f4781d1b0eaff 整体的算法思路如下&#xff1a; 初始化&#xff1a…

AWS入门实践-利用S3构建一个静态网站

使用Amazon S3托管静态网站是一个流行的选择&#xff0c;因为它简单、成本效益高&#xff0c;并且易于维护。静态网站由不含服务器端脚本的文件组成&#xff0c;如HTML、CSS和JavaScript文件。下面是使用S3托管静态网站的操作步骤&#xff1a; 如果大家没有AWS免费账号&#x…

【C++】背包问题

目录 背包问题01 背包背包不装满问题背包必须满问题 完全背包 背包问题 背包问题属于动态规划的一类题型 01 背包 背包不装满问题 背包必须满问题 #include <iostream> using namespace std; const int N 1010; #include <vector> int main() {int n , V;int v[…

AJAX —— 学习(三)(完结)

目录 一、jQuery 中的 AJAX &#xff08;一&#xff09;get 方法 1.语法介绍 2.结果实现 &#xff08;二&#xff09;post 方法 1.语法介绍 2.结果实现 &#xff08;三&#xff09;通用型的 AJAX 方法 1.语法介绍 2.结果实现 二、AJAX 工具库 axios &#xff08…

批量导入svg文件作为图标使用(vue3)vite-plugin-svg-icons插件的具体应用

目录 需求svg使用简述插件使用简述实现安装插件1、配置vite.config.ts2、src/main.ts引入注册脚本3、写个icon组件4、使用组件 需求 在vue3项目中&#xff0c;需要批量导入某个文件夹内数量不确定的svg文件用来作为图标&#xff0c;开发完成后能够通过增减文件夹内的svg文件&a…

C++高频面试知识总结 part2

C高频面试 1.sizeof是什么&#xff1f;sizeof一个class大小怎么确定&#xff1f;是在编译期还是在运行期确定?2.函数重载的机制&#xff0c;重载是在编译期还是在运行期确定&#xff0c;重载有额外开销吗3.函数重写在编译还是运行时确定&#xff1f;4.如何找到虚函数表&#x…

MySQL复制拓扑4

文章目录 主要内容一.启用GUID并配置循环复制1.其中&#xff0c;UUID用来唯一标识每一个服务器&#xff0c;事务的编号记录了在该服务器上执行的事务的顺序。使用SELECT server_uuid\G命令可以查看服务器的UUID&#xff0c;sever1的UUID值显示如下&#xff1a;代码如下&#xf…

架构图设计

我们了解了软件架构后&#xff0c;方便了我们理解软件各方面的解读&#xff0c;但是如果我们开发中有必要自己设计架构图吗&#xff1f;有&#xff0c;但是不会轮到你。这里浅浅讲一下软构图的设计&#xff0c;相信当你用一张或几张图来描述系统时&#xff0c;是不是经常遇到以…

域控报错:Windows无法创建对象 XX,因为目录服务无法分配相对标识符。

当域控制器报告错误“Windows无法创建对象&#xff0c;因为目录服务无法分配相对标识符”时&#xff0c;这通常是指在Active Directory环境中尝试创建新用户、计算机或其他安全主体时&#xff0c;域控制器无法从预先分配给每个域的RID&#xff08;Relative Identifier&#xff…

Fire Smoke - Dynamic Nature

烟雾、火灾和爆炸预制件、着色器的集合。粒子支持HD、URP和标准渲染,自然制造风,因此它们对风速、方向和颤抖做出反应。 包装支持: Unity 2021.2及更高版本 Unity 2021.2 HD RP Unity 2021.2 URP Unity 2021.3及更高版本 Unity 2021.3 LTS HD RP Unity 2021.3 LTS URP Unity…

【SkyWorking】服务追踪工具

使用 Jar 启动时添加 VM 参数 -javaagent:/path/to/apache-skywalking-apm-incubating/agent/skywalking-agent.jar -Dskywalking.agent.application_codeYOUR_APP_NAME或 -javaagent:D:\city\skywalking-agent\skywalking-agent.jaragent.service_namemy-service,agent.instan…