全志 ARM 开发板实现温度数据采集显示存储4G 网络使用 MQTT 协议上传服务器DEMO

news2024/9/19 8:54:16

项目背景
全志 ARM 开发板上有温度传感器、显示屏,以及4G模块,通过板载驱动可以读取温度传感器的数据,并将其显示在显示屏上,同时将温度数据存储在本地文件中,并通过网络上传到服务器节点,服务器使用MQTT协议进行时实数据收集,以下是一个使用全志 ARM 开发板实现温度数据采集、显示、存储并通过 4G 网络使用 MQTT 协议上传到服务器的分布式示例代码。

一、服务器端(使用 Python 的paho-mqtt库实现 MQTT 服务器)

import paho.mqtt.client as mqtt
import json

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("temperature/topic")

def on_message(client, userdata, msg):
    temperature_data = json.loads(msg.payload.decode())
    print(f"Received temperature: {temperature_data['temperature']}")

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("localhost", 1883, 60)

client.loop_forever()

二、全志 ARM 开发板客户端(C++实现)

#include <iostream>
#include <fstream>
#include <thread>
#include <mutex>
#include <curl/curl.h>
#include "temperature_driver.h"
#include <mqtt/async_client.h>

// 显示屏驱动函数(假设的)
void display_text(const char* text);

// 互斥锁保护显示屏访问
std::mutex displayMutex;

// 获取温度数据
double getTemperature() {
    return read_temperature();
}

// 在显示屏上显示温度
void displayTemperatureOnScreen() {
    double temperature = getTemperature();
    std::string temperatureStr = "Temperature: " + std::to_string(temperature);

    std::lock_guard<std::mutex> guard(displayMutex);
    display_text(temperatureStr.c_str());
}

// 文件存储数据函数
void fileWriteThread(double temperature) {
    std::ofstream logFile("/sdcard/sensor_data.log", std::ios::app);
    logFile << "Temperature: " << temperature << std::endl;
}

size_t writeCallback(char* ptr, size_t size, size_t nmemb, void* userdata) {
    std::string* response = (std::string*)userdata;
    response->append(ptr, size * nmemb);
    return size * nmemb;
}

int main() {
    try {
        const std::string SERVER_ADDRESS("tcp://localhost:1883");
        const std::string CLIENT_ID("temperature_client");

        mqtt::async_client client(SERVER_ADDRESS, CLIENT_ID);

        client.connect()->wait();

        while (true) {
            double temperature = getTemperature();

            // 显示温度
            displayTemperatureOnScreen();

            // 存储温度
            fileWriteThread(temperature);

            // 构造 MQTT 消息
            mqtt::message_ptr msg = mqtt::make_message("temperature/topic", std::to_string(temperature));

            // 发布消息
            client.publish(msg)->wait();

            std::this_thread::sleep_for(std::chrono::seconds(5));
        }

        client.disconnect()->wait();
    }
    catch (const mqtt::exception& exc) {
        std::cerr << "Error: " << exc.what() << std::endl;
        return 1;
    }

    return 0;
}

请注意:

  1. 上述代码中的temperature_driver.hdisplay_text函数需要根据实际的开发板情况进行实现。
  2. 服务器端代码仅为简单示例,实际应用中可能需要更复杂的配置和处理逻辑。
  3. 确保在全志 ARM 开发板上正确配置和编译所需的库,包括paho-mqtt的 C++ 库和相关的依赖项。

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

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

相关文章

软考高级:嵌入式系统调度算法 AI 解读

嵌入式系统中的调度算法用于管理任务的执行顺序&#xff0c;确保系统资源能够有效分配。以下是几种常见的调度算法的通俗讲解。 生活化例子 想象你是一位超市收银员&#xff0c;有很多顾客排队&#xff0c;每位顾客都可以看作一个任务&#xff0c;收银台就是你的处理器。你需…

1.1 软件测试 + AI

欢迎大家订阅【软件测试】学习专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言一、软件测试二、人工智能的引入 前言 人工智能的引入为软件测试带来了巨大的变革&#xff0c;不仅提升了测试效率和准确性&#xff0c;也为软件质量的保障提供了新的手段。通…

通信工程学习:什么是ONT光网络终端

ONT&#xff1a;光网络终端 ONT&#xff08;Optical Network Terminal&#xff0c;光网络终端&#xff09;是光纤接入网络&#xff08;FTTH&#xff09;中的关键设备&#xff0c;用于将光纤信号转换为电信号或将电信号转换为光信号&#xff0c;以实现用户设备与光纤网络的连接。…

华为OD机试 - 返回矩阵中非1的元素个数 - 广度优先搜索BFS(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

最长连续子序列 - 华为OD统一考试(E卷)

OD统一考试&#xff08;E卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 2024华为OD机试&#xff08;E卷D卷C卷&#xff09;最新题库【超值优惠】Java/Python/C合集 题目描述 有N个正整数组成的一个序列。给定整数sum&#xff0c;求长度最长的连续…

WIFI路由器的套杆天线简谈

❝本次推文简单介绍下WIFI路由器的套杆天线。 路由器天线 路由器在这个万物互联的时代&#xff0c;想必大家对其都不陌生。随着科技的发展&#xff0c;常用的路由器上的天线也越来越多&#xff0c;那么问题来了&#xff1a;天线越多&#xff0c;信号越好吗&#xff1f;路由器…

前端mock了所有……

目录 一、背景描述 二、开发流程 1.引入Mock 2.创建文件 3.需求描述 4.Mock实现 三、总结 一、背景描述 前提&#xff1a; 事情是这样的&#xff0c;老板想要我们写一个demo拿去路演/拉项目&#xff0c;有一些数据&#xff0c;希望前端接一下&#xff0c;写几个表格&a…

Linux进程间通信——探索共享内存—— 剖析原理, 学习接口应用

前言&#xff1a;本节内容主要讲解进程间通信的&#xff0c; systemV版本下的共享内存。 共享内存&#xff0c;顾名思义&#xff0c; 其实就是一块内存&#xff0c; 它不同于管道是一个文件。 所以它的传输速度是很快的。 因为管道是文件&#xff0c;有缓冲区&#xff0c; 而共…

Day99 代码随想录打卡|动态规划篇--- 01背包问题

题目&#xff08;卡玛网T46&#xff09;&#xff1a; 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等&am…

LeRobot - 让现实机器人更易学

文章目录 一、关于 LeRobot特点模拟环境中预训练模型的示例 致谢教程 - Getting Started with Real-World Robots 二、安装三、Walkthrough1、可视化数据集2、LeRobotDataset的格式3、评估预先训练的策略4、训练你自己的政策复制最先进的&#xff08;SOTA&#xff09; 四、贡献…

Vue3 中 Aos 动画同时触发的解决办法

文章目录 问题现象解决之后的效果解决办法问题猜测 问题现象 我总共有四行数据&#xff0c;每一行都是一个动画&#xff0c;但是触发第一个之后其他三个也都触发了 我想要的效果是&#xff1a;动画从底部出现的时候触发一个动画&#xff0c;不要都触发掉 解决之后的效果 解决…

智慧卫生间系统:引领公共卫生间管理的新时代@卓振思众

随着城市化进程的加快&#xff0c;公共卫生间的使用频率不断增加。如何提升公共卫生间的使用体验、管理效率以及卫生水平&#xff0c;已成为各地政府和管理者关注的焦点。智慧卫生间系统应运而生&#xff0c;成为解决这一问题的重要工具。它结合了物联网技术和智能管理理念&…

四、Cookie 和 Session

文章目录 1. Cookie 饼干1.1 什么是 Cookie?1.2 如何创建 Cookie1.3 服务器如何获取 Cookie1.4 Cookie 值的修改1.5 浏览器查看 Cookie1.6 Cookie 生命控制&#xff08;指浏览器中Cookie的存在时间&#xff09;1.7 Cookie 有效路径 Path 的设置 2. Session 会话2.1 什么是 Ses…

Canopen-pn有线通信标准在汽车制造中至关重要

电子元件越来越多地被集成到车辆中&#xff0c;从而实现与物联网世界的连接。该行业中主要的高速串行接口方法包括控制器局域网 (CAN) 总线 。CAN 是运输应用中使用的一种强大的总线标准。它旨在允许微控制器(MCU) 和相关组件与彼此的应用程序进行通信。这无需系统具有主机即可…

从入门到精通,带你探索适合新手的视频剪辑工具

用视频来分享生活已经变成越来越多人的一种习惯&#xff0c;很多时候视频并不能一镜到底&#xff0c;所以还需要一些的修改、剪辑操作&#xff0c;那么这次我将介绍几款视频剪辑工具&#xff0c;希望能够让你分享的道路更加通畅。 1.FOXIT视频剪辑 连接直达>>https://w…

【项目设计】Facial-Hunter

目录 一、项目介绍 二、开发环境以及技术 三、项目架构设计 3.1 项目总体架构 3.2 客户端架构 3.3 主服务端架构 3.4 处理服务端架构 3.5 数据库设计 四、FaceNet 五、代码实现 一、项目介绍 该项目是基于深度学习与负载均衡的人脸识别系统 该项目主要由三个部分组…

【Elasticsearch系列十二】聚合-电视案例

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

反射的相关内容

目录 一、什么是反射 二、为什么会有反射 三、反射是如何工作的 获取类信息的三种方式&#xff1a; 例&#xff1a; 四、获取类信息并调用 1.获取 &#xff08;1&#xff09;获取变量 获取全部类信息 获取public修饰的 获取指定某一个 &#xff08;2&#xff09;…

【新手上路】衡石分析平台使用手册-租户管理

租户管理​ 衡石系统支持服务一个平台方和多个企业客户的租户模式&#xff0c;平台方管理租户&#xff0c;为租户提供数据&#xff0c;租户在系统内进行数据分析。 衡石系统增加工作空间的设计&#xff0c;在平台方和租户之间提供单向的传递通道&#xff0c;平台厂商可以轻松…

C++map,set,multiset,multimap详细介绍

目录 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 3.1 set set的介绍 set的使用 1. set的模板参数列表 2. set的构造 3. set的迭代器 4. set的容量 5. set的修改操作 6. set的使用举例 ​3.2 map map的介绍 map的使用 1. map的模板参数声明 2. map的构造 …