物聯網外設管理服務平臺

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 驅動層功能

序號驅動名稱掛載設備技術點備注
1wd_drv/dev/wd_drvi2c總線模型同一總線不同地址
2light_drv/dev/light_drvi2c總線模型
3led_drv/dev/led_drvplatform模型
4dd_drv/dev/dd_drvspi總線模型
5key_drv/dev/key_drvio信號驅動

阻塞式IO獲取中斷事件;

根據不同按鈕事件開關不同的led燈

6電壓測量

/sys/bus/iio/devices/iio:device0

/in_voltage1_raw

adc數據采集

1.3 應用層功能

序號名稱apiapi描述
1led1控制xx.xx.xx.xx:8080/api/led1

{"value":true}? value的值控制燈的亮/滅

2led2控制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驅動手動編寫

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75062.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75062.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75062.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyTorch教程:如何讀寫張量與模型參數

本文演示了PyTorch中張量&#xff08;Tensor&#xff09;和模型參數的保存與加載方法&#xff0c;并提供完整的代碼示例及輸出結果&#xff0c;幫助讀者快速掌握數據持久化的核心操作。 1. 保存和加載單個張量 通過torch.save和torch.load可以直接保存和讀取張量。 import to…

持續集成:GitLab CI/CD 與 Jenkins CI/CD 的全面剖析

一、引言 在當今快速迭代的軟件開發領域,持續集成(Continuous Integration,CI)已成為保障軟件質量、加速開發流程的關鍵實踐。通過頻繁地將代碼集成到共享倉庫,并自動進行構建和測試,持續集成能夠盡早發現并解決代碼沖突和缺陷。而 GitLab CI/CD 和 Jenkins CI/CD 作為兩…

Python 序列構成的數組(序列的增量賦值)

序列的增量賦值 增量賦值運算符 和 * 的表現取決于它們的第一個操作對象。簡單起 見&#xff0c;我們把討論集中在增量加法&#xff08;&#xff09;上&#xff0c;但是這些概念對 * 和其他 增量運算符來說都是一樣的。 背后的特殊方法是 iadd &#xff08;用于“就地加法”&…

GEO, TCGA 等將被禁用?!這40個公開數據庫可能要小心使用了

GEO, TCGA 等將被禁用&#xff1f;&#xff01;這40個公開數據庫可能要小心使用了 最近NIH公共數據庫開始對中國禁用的消息鬧得風風火火&#xff1a; 你認為研究者上傳到 GEO 數據庫上的數據會被禁用嗎&#xff1f; 單選 會&#xff0c;畢竟占用存儲資源 不會&#xff0c;不…

【如何自建MCP服務器?從協議原理到實踐的全流程指南】

文章目錄 如何自建MCP服務器&#xff1f;從協議原理到實踐的全流程指南一、MCP協議是什么&#xff1f;核心架構 二、為什么要自建MCP服務器&#xff1f;1. 突破LLM的固有局限2. 實現個性化功能擴展3. 確保數據隱私安全 三、手把手搭建MCP服務器&#xff08;Python示例&#xff…

鴻蒙開發_ARKTS快速入門_語法說明_渲染控制---純血鴻蒙HarmonyOS5.0工作筆記012

然后我們再來看渲染控制 首先看條件渲染,其實就是根據不同的狀態,渲染不同的UI界面 比如下面這個暫停 開啟播放的 可以看到就是通過if 這種條件語句 修改狀態變量的值 然后我們再來看這個, 下面點擊哪個,上面橫線就讓讓他顯示哪個 去看一下代碼 可以看到,有兩個狀態變量opt…

【Java設計模式】第3章 軟件設計七大原則

3-1 本章導航 學習開辟原則(基礎原則)依賴倒置原則單一職責原則接口隔離原則迪米特法則(最少知道原則)里氏替換原則合成復用原則(組合復用原則)核心思想: 設計原則需結合實際場景平衡,避免過度設計。設計模式中可能部分遵循原則,需靈活取舍。3-2 開閉原則講解 定義 軟…

JVM即時編譯(JIT)

JVM基礎回顧 Java 作為一門高級程序語言&#xff0c;由于它自身的語言特性&#xff0c;它并非直接在硬件上運行&#xff0c;而是通過編譯器(前端編譯器)將 Java 程序轉換成該虛擬機所能識別的指令序列&#xff0c;也就是字節碼&#xff0c;然后運行在虛擬機之上的&#xff1b;…

剛體碰撞檢測與響應(C++實現)

本文實現一個經典的物理算法&#xff1a;剛體碰撞檢測與響應。這個算法用于檢測兩個剛體&#xff08;如矩形或圓形&#xff09;是否發生碰撞&#xff0c;并在碰撞時更新它們的速度和位置。我們將使用C來實現這個算法&#xff0c;并結合**邊界框&#xff08;Bounding Box&#x…

常用的國內鏡像源

常見的 pip 鏡像源 阿里云鏡像&#xff1a;https://mirrors.aliyun.com/pypi/simple/ 清華大學鏡像&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 中國科學技術大學鏡像&#xff1a;https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣鏡像&#xff1a;https://pypi.doub…

鴻蒙小案例-京東登錄

效果 代碼實現 Entry Component struct Index {build() {Column() {Row() {Image($r(app.media.jd_cancel)).width(20)Text(幫助).fontSize(16).fontColor(#666)}.width(100%).justifyContent(FlexAlign.SpaceBetween)Image($r(app.media.jd_logo)).height(250).width(250)// …

《 Scikit-learn與MySQL的深度協同:構建智能數據生態系統的架構哲學》

在機器學習工程實踐中&#xff0c;數據存儲與模型訓練的割裂始終是制約算法效能的關鍵瓶頸。Scikit-learn作為經典機器學習庫&#xff0c;其與MySQL的深度協同并非簡單的數據管道連接&#xff0c;而是構建了一個具備自組織能力的智能數據生態系統。這種集成突破了傳統ETL流程的…

華為AI-agent新作:使用自然語言生成工作流

論文標題 WorkTeam: Constructing Workflows from Natural Language with Multi-Agents 論文地址 https://arxiv.org/pdf/2503.22473 作者背景 華為&#xff0c;北京大學 動機 當下AI-agent產品百花齊放&#xff0c;盡管有ReAct、MCP等框架幫助大模型調用工具&#xff0…

關于軟件bug描述

軟件缺陷&#xff08;Defect&#xff09;&#xff0c;常常又被叫做Bug。 所謂軟件缺陷&#xff0c;即為計算機軟件或程序中存在的某種破壞正常運行能力的問題、錯誤&#xff0c;或者隱藏的功能缺陷。缺陷的存在會導致軟件產品在某種程度上不能滿足用戶的需要。IEEE729-1983對缺…

【元表 vs 元方法】

元表 vs 元方法 —— 就像“魔法書”和“咒語”的關系 1. 元表&#xff08;Metatable&#xff09;&#xff1a;魔法書 是什么&#xff1f; 元表是一本**“規則說明書”**&#xff0c;它本身是一個普通的 Lua 表&#xff0c;但可以綁定到其他表上&#xff0c;用來定義這個表應該…

Spring Boot 通過全局配置去除字符串類型參數的前后空格

1、問題 避免前端輸入的字符串參數兩端包含空格&#xff0c;通過統一處理的方式&#xff0c;trim掉空格 2、實現方式 /*** 去除字符串類型參數的前后空格* author yanlei* since 2022-06-14*/ Configuration AutoConfigureAfter(WebMvcAutoConfiguration.class) public clas…

C語言核心知識點整理:結構體對齊、預處理、文件操作與Makefile

目錄 結構體的字節對齊預處理指令詳解文件操作基礎Makefile自動化構建總結 1. 結構體的字節對齊 字節對齊原理 內存對齊&#xff1a;CPU訪問內存時&#xff0c;對齊的地址能提高效率。操作系統要求變量按類型大小對齊。對齊規則&#xff1a; 每個成員的起始地址必須是min(成…

VBA+BOS單據+插件,解決計劃任務跟蹤的問題之二:導入ERP

第二步&#xff0c;就是要將拆分好的任務導入ERP了 1、將建一個BOS單據叫“任務池”&#xff0c;大概是這樣的 然后在拆分工具中進行導數據&#xff0c;點擊“數據導出準備”&#xff0c;跳轉到“導入ERP”界面&#xff0c;然后點“獲取數據”&#xff0c;將拆分好的數據轉過來…

使用uglifyjs對靜態引入的js文件進行壓縮

前言 因為有時候js文件沒有npm包&#xff0c;或者需要修改&#xff0c;只能引入靜態的js&#xff0c;那么這個時候就可以對js進行壓縮了。我其實想通過vite、webpack等插件進行壓縮的&#xff0c;可是他都不能定位到public目錄下面的文件&#xff0c;所以我只能自己壓縮了。編…

藍橋杯 web 水果拼盤 (css3)

做題步驟&#xff1a; 看結構&#xff1a;html 、css 、f12 分析: f12 查看元素&#xff0c;你會發現水果的高度剛好和拼盤的高度一樣&#xff0c;每一種水果的盤子剛好把頁面填滿了&#xff0c;所以咱們就只要讓元素豎著排列&#xff0c;加上是豎著&#xff0c;排不下的換行…