物联网外设管理服务平台
1 开发目标
1.1 架构图

操作系统:基于Linux5.10.10源码和STM32MP157开发板,完成tf-a(FSBL)、u-boot(SSBL)、uImage、dtbs的裁剪;
驱动层:为每个外设配置DTS并且单独封装外设驱动模块。其中电压ADC测试,采用linux内核自带的stm32mp-xx驱动。
应用层:在linux环境下,通过xxx、xxx、xxx使用c语言开发一款WebServer,对内访问驱动获取数据或遥控硬件,向外部用户提供restful api访问接口;
1.2 驱动层功能
| 序号 | 驱动名称 | 挂载设备 | 技术点 | 备注 |
| 1 | wd_drv | /dev/wd_drv | i2c总线模型 | 同一总线不同地址 |
| 2 | light_drv | /dev/light_drv | i2c总线模型 | |
| 3 | led_drv | /dev/led_drv | platform模型 | |
| 4 | dd_drv | /dev/dd_drv | spi总线模型 | |
| 5 | key_drv | /dev/key_drv | io信号驱动 | 阻塞式IO获取中断事件; 根据不同按钮事件开关不同的led灯 |
| 6 | 电压测量 | /sys/bus/iio/devices/iio:device0 /in_voltage1_raw | adc数据采集 |
1.3 应用层功能
| 序号 | 名称 | api | api描述 |
| 1 | led1控制 | xx.xx.xx.xx:8080/api/led1 | {"value":true} value的值控制灯的亮/灭 |
| 2 | led2控制 | xx.xx.xx.xx:8080/api/led2 | {"value":false} |
| 3 | 数显管控制 | xx.xx.xx.xx:8080/api/dd_show | {"value":"0-温度"} 显示温度,2位小数 {"value":"1-湿度"} 显示湿度,2位小数 {"value":"2-光照"} 显示光照,整数 {"value":"3-电压值"} 显示电压值,整数,单位mV |
| 4 | 获取测量值 | xx.xx.xx.xx:8080/api/state | 返回值: { "voltage": 95.9244, //电压值,单位mV "light": 83, //光照强度 "sd": 54.8788, //湿度 "wd": 24.7079 //温度 } |
2 效果展示(部分)
2.1 webserver的界面效果
PS:并非通过html/css写的,而是通过mongoose官网编辑器生成: Mongoose官网
2.2 驱动模块安装列表

2.3 控制效果展示
(1)在web上,通过点击LED1或LED2的Toggle组件,可以实时控制LED亮灭

(2)在web上,通过下拉框,可以选择当前数显管显示什么内容(例如:温度和电压)

2.4 postman测试restful-api接口(部分)

3 源码
源码地址
iot_drivers: 驱动源码(见git)
webserver: webserver源码(见git)
linux设备树配置(部分):
/ {myled{ //led设备树compatible = "zr,myled";led-gpios = <&gpioe 10 0>,<&gpiof 10 0>,<&gpioe 8 0>;};mykey{ //按键设备树interrupt-parent = <&gpiof>;interrupts=<9 0>,<7 0>,<8 0>;};};//基于I2C总线的 温度度传感器树 和 光照传感器设备树
&i2c1{pinctrl-names = "default", "sleep";//指定管脚复用的两种不同模式pinctrl-0 = <&i2c1_pins_b>;//设置默认模式下的管脚复用pinctrl-1 = <&i2c1_sleep_pins_b>;i2c-scl-rising-time-ns = <100>;//设置时钟线上升沿的时间i2c-scl-falling-time-ns = <7>;status = "okay";//状态设置为OKAY/delete-property/dmas; //删除无用的属性/delete-property/dma-names;mywd@40{compatible="zr,mywd";reg=<0X40>;};mylight@1e{compatible="zr,mylight";reg=<0x1e>;};
};//基于spi总线的 数显管设备树
&spi4{pinctrl-names="default","sleep";pinctrl-0=<&spi4_pins_b>;pinctrl-1=<&spi4_sleep_pins_b>;//添加对片选线管脚的描述cs-gpios=<&gpioe 11 0>;status="okay";mydd@0{compatible="zr,mydd";spi-max-frequency = <10000000>;//设置当前spi工作的最大频率为10Mreg=<0>; };
};//基于iio的电压采集设备树
&adc {vdd-supply = <&vdd>;vdda-supply = <&vdd>;vref-supply = <&vdd>;status = "okay";adc1: adc@0 {st,adc-channels = <0 1>;st,min-sample-time-nsecs = <10000>;status = "okay";};
};
4、待探索问题
(1)基于webserver的websocket的实现
(2)pwm、dma、定时器的输入捕获中断驱动的编写
(3)ADC驱动手动编写
相关文章:
物联网外设管理服务平台
1 开发目标 1.1 架构图 操作系统:基于Linux5.10.10源码和STM32MP157开发板,完成tf-a(FSBL)、u-boot(SSBL)、uImage、dtbs的裁剪; 驱动层:为每个外设配置DTS并且单独封装外设驱动模块。其中电压ADC测试,采用linux内核…...
1.ElasticSearch-入门基础操作
一、介绍 The Elastic Stack 包含ElasticSearch、Kibana、Beats、LogStash 这就是所说的ELK 能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES,ES是一个开源的高扩展的分布式全文搜索引擎,是…...
uniapp加载json动画
一、添加canvas画布 <canvas id"lottie_demo" type"2d" style"display: inline-block;width: 148rpx; height: 148rpx;" /> 二、引入依赖和JSON文件 安装依赖 npm install lottie-miniprogram --save import lottie from lottie-mini…...
图论:最小生成树
最小生成树 (无向无环图) 概念 1.Prim算法 P3366 【模板】最小生成树 - 洛谷 邻接矩阵实现 #include<iostream> #include<cstring> using namespace std; const int INF 0x3f3f3f3f; const int N 5e3 10; int dis[N]; //记录每个结点到…...
智能多媒体处理流水线——基于虎跃办公API的自动化解决方案
在内容爆炸的时代,多媒体文件处理(图片压缩、视频转码、音频降噪)已成为内容生产者的日常挑战。本文将演示如何基于虎跃办公的多媒体处理API,构建自动化处理流水线,实现: 批量文件智能分类格式自动转换质量…...
虚拟表、TDgpt、JDBC 异步写入…TDengine 3.3.6.0 版本 8 大升级亮点
近日,TDengine 3.3.6.0 版本正式发布。除了此前已亮相的时序数据分析 AI 智能体 TDgpt,本次更新还带来了多个针对性能与易用性的重要增强:虚拟表全面上线,支持更灵活的一设备一表建模;JDBC 写入机制全新升级࿰…...
virt-manager配置NAT
在 virt-manager 中配置 NAT 模式,可以通过以下步骤完成。NAT(Network Address Translation)模式允许虚拟机通过宿主机的网络连接访问外部网络,同时对外隐藏虚拟机的真实 IP 地址。以下是具体操作步骤: 步骤 1&a…...
rqlite:一个基于SQLite构建的分布式数据库
今天给大家介绍一个基于 SQLite 构建的轻量级分布式关系型数据库:rqlite。 rqlite 基于 Raft 协议,结合了 SQLite 的简洁性以及高可用分布式系统的稳健性,对开发者友好,操作极其简便,其核心设计理念是以最低的复杂度实…...
Dynamics 365 Business Central Recurring Sales Lines 经常购买销售行 来作 订阅
#D365 BC ERP# #Navision# 前面有节文章专门介绍了BC 2024 Wave 2 支持的更好的Substription & Recurring Billing。 其实在D365 BC ERP中一直有一个比较简单的订阅模块Recrring Sales Lines。本文将介绍一下如何用Recurring Sales Lines来 实施简易的订阅Substription。具…...
【WebRTC】开源项目Webrtc-streamer介绍
WebRTC-Streamer 这是一个用于通过简单的信令机制(参见 api)流式传输 WebRTC 媒体源的实验项目,支持以下媒体源: 捕获设备 屏幕捕获 mkv 文件 RMTP/RTSP 源 同时该项目也兼容 WHEP 接口。 注意 * 在线演示已停止,…...
探索生成式AI在游戏开发中的应用——3D角色生成式 AI 实现
概述 自从开创性论文 Denoising Diffusion Probabilistic Models 发布以来,此类图像生成器一直在改进,生成的图像质量在多个指标上都击败了 GAN,并且与真实图像无法区分。 NeRF: Representing Scenes as Neural Radiance Fields for View S…...
androd的XML页面 跳转 Compose Activity 卡顿问题
解决 XML 点击跳转到 Compose Activity 卡顿问题 当从 XML 布局的 Activity 跳转到 Compose Activity 时出现卡顿现象,这通常是由以下几个原因导致的: 可能的原因及解决方案 1. Compose 首次初始化开销 问题:Compose 框架首次初始化需要时…...
神经网络能不能完全拟合y=x² ???
先说结论:关键看激活函数的选择 ReLU神经网络对非线性函数的拟合分析 ReLU神经网络对非线性函数(如 y x 2 y x^2 yx2)的拟合只能是逼近,而无法实现数学意义上的完全重合。这一结论源于ReLU的分段线性本质与目标函数的非线性结…...
Spring MVC 逻辑视图(JSP、Thymeleaf、FreeMarker)与非逻辑视图(JSON、Excel、PDF、XML)详解及示例
Spring MVC 逻辑视图与非逻辑视图详解及示例 一、逻辑视图与非逻辑视图的定义 类型定义逻辑视图通过视图解析器(ViewResolver)将逻辑名称(如 success)映射到具体视图实现。非逻辑视图直接返回具体视图对象(如 JsonVie…...
K8s 老鸟的配置管理避雷手册
Yining, China 引言 对于这种案例,你们的处理思路是怎么样的呢,是否真正的处理过,如果遇到,你们应该怎么处理。 最后有相关的学习群,有兴趣可以加入。 开始 一、血泪教训:环境变量引发的真实灾难 1.1 …...
云原生周刊:深入探索 kube-scheduler-simulator
开源项目推荐 mcp-server-kubernetes mcp-server-kubernetes 是一个实现了模型上下文协议(MCP)的服务器,旨在通过自然语言与 K8s 集群进行交互。它支持连接到 K8s 集群,列出所有 Pod、服务、部署和节点,创建、描述、…...
3-Visual Studio 2022打包NET开发项目为安装包
引言 本文将上一期博文>>>门店管理系统开发<<<开发的项目打包为Windows安装包 一,安装扩展 安装此扩展:installer Projects 二,创建安装程序项目 创建项目 右键解决方案-添加-新建项目 选择setup Project项目 填写项目名…...
国内外网络安全政策动态(2025年3月)
▶︎ 1.《关于进一步加强智能网联汽车产品准入、召回及软件在线升级管理的通知》发布 3月1日,工业和信息化部、市场监管总局联合发布《关于进一步加强智能网联汽车产品准入、召回及软件在线升级管理的通知》(以下简称《通知》)。 该通知旨在…...
Kafka 和 Flink的讲解
一、Kafka:分布式消息队列 1. 核心概念 角色:Kafka 是一个分布式、高吞吐量的消息队列(Pub-Sub 模型),用于实时传输数据流。关键术语: Producer(生产者):发送数据的客户端(如传感器、应用日志)。Consumer(消费者):接收…...
已知Word内容格式固定,通过宏实现Word转Excel
文章目录 需求描述一、宏是什么?二、使用步骤1.启用开发工具2.VBA基础知识3.单个Word文件转为Excel4.批量将Word文件转为Excel文件 总结 需求描述 现在有多个Word文档,Word文档格式固定,假如Word内容分为单选题和多选题,每个题目…...
一文详解OpenGL环境搭建:Ubuntu20.4使用CLion配置OpenGL开发环境
在计算机图形学的广阔领域中,OpenGL作为行业标准的图形库,为开发者提供了强大的工具集来创建从简单的2D图形到复杂的3D世界。然而,对于初学者而言,配置一个合适的开发环境是迈向成功的第一步。本文将详细介绍如何在Ubuntu 20.04.3 LTS操作系统上搭建基于CLion的OpenGL开发环…...
Java面试黄金宝典41
1. IO 种类 定义 在 Java 里,IO(输入 / 输出)主要分为字节流和字符流这两种类型。字节流以字节为单位处理数据,适合处理二进制数据,像图片、音频、视频等;字符流以字符为单位处理数据,适用于处理文本数据。 要点 字节流处理二进制数据,字符流处理文本数据。字节流的基类…...
边缘计算革命:低功耗GPU在自动驾驶实时决策中的应用
边缘计算革命:低功耗GPU在自动驾驶实时决策中的应用 ——分析NVIDIA Jetson与华为昇腾的嵌入式方案差异 一、自动驾驶的实时决策挑战与边缘计算需求 自动驾驶系统需在30ms内完成环境感知、路径规划与车辆控制的全流程闭环。传统云端计算受限于网络延迟…...
【Java面试系列】Spring Boot中自动配置原理与自定义Starter开发实践详解 - 3-5年Java开发必备知识
【Java面试系列】Spring Boot中自动配置原理与自定义Starter开发实践详解 - 3-5年Java开发必备知识 引言 Spring Boot作为Java生态中最流行的框架之一,其自动配置机制和Starter开发是面试中的高频考点。对于3-5年经验的Java开发者来说,深入理解这些原理…...
MySQL的子查询
一、前言 MySQL 子查询是指嵌套在其他 SQL 语句(如 SELECT、WHERE、FROM 等)内部的查询。用于辅助主查询完成复杂的数据筛选或计算。 二、子查询分类 标量子查询 描述:返回 单行单列(一个值),常用于比较运…...
SpringDoc【使用详解】
SpringDoc使用详解 一、何为SpringDoc二、概念解释三、SpringDoc使用2.1简单集成2.2 配置SpringDoc2.2.1 yml方式配置2.2.2配置文档信息 2.3配置文档分组2.4使用注解2.4.1 Tag2.4.2 Operation2.4.3 Schema2.4.4 NotNull2.4.5 Parameter2.4.6 Parameters2.4.7 ApiResponses 和Ap…...
Redis持久化 | RDB AOF | 常见问题
目录 RDB(Redis DataBase) 给什么内存数据做快照——(全量) 触发机制 RDB文件生成的时候会阻塞主线程吗? 关闭持久化命令 bgsave执行流程 RDB文件怎么配置?有哪些优缺点 优点: 缺点&am…...
判断矩阵A是否可以相似对角化
【例题1】 【例题2】...
React 列表渲染
开发环境:Reacttsantd 你可能经常需要通过 JavaScript 的数组方法 来操作数组中的数据,从而将一个数据集渲染成多个相似的组件。在这篇文章中,你将学会如何在 React 中使用 filter() 筛选需要渲染的组件和使用 map() 把数组转换成组件数组。 …...
C#核心学习(八)面向对象--封装(7)终章 C#内部类和分部类、密封类
目录 一、内部类(Inner Class) 1. 什么是内部类? 2. 内部类的作用 3. 如何定义内部类? 4. 常见应用场景 二、分部类(Partial Class) 1. 什么是分部类? 2. 分部类的写法 3.…...

