<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

學習筆記|如何用Go程序采集溫濕度傳感器數據

ElfBoard ? 2024-03-21 11:46 ? 次閱讀

在共創社內部的交流中,先前有一位成員展示了如何借助C語言來實現對AHT20溫濕度傳感器數據的讀取。這一實例觸發了另一位共創官的靈感,他決定采納Go語言重新構建這一數據采集流程。接下來,我們將詳細解析整個利用Go語言從AHT20溫濕度傳感器獲取數據的完整步驟和實現方法。

一、C程序獲取AHT20溫濕度

1、參考ElfBoard官方例程:03-例程源碼\03-1命令行例程源碼\09_elf1_cmd_aht20\elf1_cmd_aht20.c

#include "stdio.h" #include "unistd.h" #include "sys/types.h" #include "sys/stat.h" #include "sys/ioctl.h" #include "fcntl.h" #include "stdlib.h" #include "string.h" #include #include #include #include #include #define AHT20_DEV "/dev/aht20" int main(int argc, char *argv[]) { int fd; unsigned int databuf[2]; int c1,t1; float hum,temp; int ret = 0; fd = open(AHT20_DEV, O_RDWR); if(fd < 0) { printf("can't open file %s\r\n", AHT20_DEV); return -1; } while (1) { ret = read(fd, databuf, sizeof(databuf)); if(ret == 0) { /* ?????? */ c1 = databuf[0]*1000/1024/1024; // t1 = databuf[1] *200*10/1024/1024-500; hum = (float)c1/10.0; temp = (float)t1/10.0; printf("hum = %0.2f temp = %0.2f \r\n",hum,temp); usleep(500000); } } close(fd); return 0; }

2、使用交叉編譯環境編譯,拷貝到開發板

wKgaomX7q6SAM4_wAABQIxmFG0I589.png

3、運行程序查看結果

wKgaomX7q7iADFmyAAB9kdjjNC0442.png

二、Go程序獲取AHT20溫濕度

1、參考C程序使用Go程序復現,代碼如下:

package main import ( "fmt" "syscall" "time" "unsafe" ) const Aht20Dev = "/dev/aht20" func main() { fd, err := syscall.Open(Aht20Dev, syscall.O_RDWR, 0) if err != nil { fmt.Printf("can't open file %s: %s\n", Aht20Dev, err) return } defer syscall.Close(fd) buf := make([]byte, 8) const delay = 500 * time.Millisecond var c1, t1 int var hum, temp float32 for { n, err := syscall.Read(fd, buf) if err != nil { fmt.Println("Read err", err) } if n == 0 { c1 = int(*(*uint32)(unsafe.Pointer(&buf[0]))) * 1000 / 1024 / 1024 t1 = int(*(*uint32)(unsafe.Pointer(&buf[4])))*200*10/1024/1024 - 500 hum = float32(c1) / 10.0 temp = float32(t1) / 10.0 fmt.Printf("hum = %.2f temp = %.2f\n", hum, temp) time.Sleep(delay) } } syscall.Close(fd) }

2、修改構建配置,添加環境參數:GOOS=linux;GOARCH=arm;GOARM=7。編譯輸出后拷貝到開發板。并修改可執行權限:chmod 777 go_temp_linux

3、運行查看結果

wKgaomX7q-OAZ6haAADNRHFXrKY254.png

三、將該功能整合到Web服務中

1、建立Gin Web項目

為了方便后續功能拓展,我這里重新建立了一個較為完整的Web項目。目錄結構如下:

wKgaomX7q_2AcGOwAAA_k_mgQV8785.png

并且對resp進行了簡單的封裝。

2、有關AHT20溫濕度傳感器的部分

(1)AHT20溫濕度傳感器Logic

package aht20Logic import ( "fmt" "syscall" "unsafe" ) const Aht20Dev = "/dev/aht20" type HumAndTemp struct { Hum float32 `json:"hum,omitempty"` Temp float32 `json:"temp,omitempty"` } func ReadHumAndTemp() (HumAndTemp, error) { fd, err := syscall.Open(Aht20Dev, syscall.O_RDWR, 0) if err != nil { fmt.Printf("can't open file %s: %s\n", Aht20Dev, err) return HumAndTemp{}, nil } defer syscall.Close(fd) buf := make([]byte, 8) n, err := syscall.Read(fd, buf) if err != nil { fmt.Println("Read err", err) } if n == 0 { c1 := int(*(*uint32)(unsafe.Pointer(&buf[0]))) * 1000 / 1024 / 1024 t1 := int(*(*uint32)(unsafe.Pointer(&buf[4])))*200*10/1024/1024 - 500 _ = syscall.Close(fd) return HumAndTemp{Hum: float32(c1) / 10.0, Temp: float32(t1) / 10.0}, nil } return HumAndTemp{}, nil }

(2)ATH20溫濕度傳感器Handler

package aht20Handler import ( "Web/logic/aht20Logic" "Web/utils/resp" "github.com/gin-gonic/gin" ) func HumAndTemp(c *gin.Context) { data, err := aht20Logic.ReadHumAndTemp() if err != nil { resp.Fail(c, 500, resp.CodeSystemErr) } resp.Success(c, data) }

(3)router(由于目前只有兩個路由組所以就先寫到一個文件中,后續模塊增加了再繼續分隔)

package routers import ( "Web/controller/aht20Handler" "Web/controller/testHandler" "github.com/gin-gonic/gin" ) const ( baseUrl = "elf1" ) func SetRouter() *gin.Engine { r := gin.Default() test := r.Group(baseUrl + "/test") { test.GET("ping", testHandler.PingPong) } aht20 := r.Group(baseUrl + "/aht20") { aht20.GET("hum-temp", aht20Handler.HumAndTemp) } return r }

四、 編譯、測試

1、添加編譯環境參數:GOOS=linux;GOARCH=arm;GOARM=7,執行編譯,拷貝到開發板,修改可執行權限

2、啟動服務,進行測試

wKgaomX7rSaAP3h6AAHTws_ephE245.pngwKgZomX7rSaAUf5rAADaF9_vBHs234.png

3、可以看到服務正常運行,得到溫濕度信息

至此,就完成了通過Go語言實現對AHT20溫濕度數據的有效采集。這一成果的達成,充分展現了共創社成員對嵌入式研發的探索精神。期待這一實踐經歷能夠為更多的嵌入式愛好者提供有價值的參考借鑒。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2529

    文章

    48474

    瀏覽量

    741840
  • 嵌入式
    +關注

    關注

    5001

    文章

    18394

    瀏覽量

    291024
  • Linux
    +關注

    關注

    87

    文章

    11017

    瀏覽量

    206956
  • 開發板
    +關注

    關注

    25

    文章

    4542

    瀏覽量

    94711
收藏 人收藏

    評論

    相關推薦

    基于機房溫度濕度采集儀器——溫濕度傳感器參數說明

    ;Link-Max溫濕度傳感器采集模塊品種多樣,適合經銷并接受OEM批量訂單。 聯脈溫濕度傳感器四大優勢 1.Modbu
    發表于 10-26 17:07

    sht10溫濕度傳感器驅動

    本帖最后由 jafybestwish 于 2014-10-6 10:00 編輯 sht10溫濕度傳感器驅動,提供溫濕度傳感器sht10的驅動代碼,方便大家
    發表于 10-06 09:57

    基于藍牙技術的溫濕度傳感器方案

    技術相融合設計的藍牙無線溫度傳感器,不但可以方便、實時、可靠地將采集到的溫濕度數據傳輸給控制后臺(如APP),大幅度提高了溫濕度測量的精準和實時性,同時,藍牙
    發表于 08-28 17:20

    機房溫濕度環境監控系統用POE供電網絡型溫濕度傳感器

    產品關鍵詞:RJ45網口溫濕度傳感器,TCP/IP協議溫濕度變送器,網口網絡型溫濕度采集模塊,機房POE交換機供電型
    發表于 10-10 13:41

    采用數字溫濕度傳感器的多點溫濕度報警系統設計

    構成  1.1 系統原理  實驗室多點溫濕度報警系統原理框圖如圖1所示,由低性價比單片機對數字溫濕度傳感器控制,通過模擬溫度傳感器通訊時序,實現對
    發表于 11-13 10:53

    基于Si7001溫濕度傳感器的家庭等數據采集系統設計

    前言隨著生活水平的提高,家具智能化的需求逐步顯現,溫度、濕度數據采集的應用也開始顯現出越來越大的市場潛力。本文中,通過Silicon Labs的Si7001溫濕度傳感器,C8051F
    發表于 07-08 08:31

    基于SHT11溫濕度傳感器和單片機技術的智能溫濕度測量系統

    研究了基于SHT11溫濕度傳感器和單片機技術的智能溫濕度測量系統。系統使用SHT11溫濕度傳感器實時采集
    發表于 04-27 06:34

    DHT11溫濕度傳感器介紹

    DHT11溫濕度傳感器介紹,1.實物原理圖2.模塊說明2.1 DHT11產品概述DHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度
    發表于 07-21 09:04

    【FPGA DEMO】Lab 12:溫濕度傳感器的應用

    `項目名稱:溫濕度傳感器的應用具體要求:采集溫濕度傳感器數據顯示到LCD屏系統設計:IIC總線
    發表于 07-31 10:41

    基于STM32開發板實現傳感數據采集-DHT11溫濕度采集

    STM32F407ZGT6開發板進行項目開發,選用的傳感器為常見通用的DHT11溫濕度傳感器。傳感器采集到的
    發表于 08-10 07:41

    AHT20溫濕度傳感器數據采集

    基于I2C硬件協議的AHT20溫濕度傳感器數據采集一、軟件I2C二、硬件I2C三、基于I2C硬件協議的AHT20溫濕度傳感器
    發表于 08-23 06:57

    何用DHT11溫濕度傳感器獲取溫濕度信息

    :https://pan.baidu.com/s/1J6AuQpoDJbjMko3kSD4aZw提取碼:81f5取走點個贊~一、課題1、用 DHT11 溫濕度傳感器獲取溫濕度信息,顯示到OLED屏上2、用 MQ-135 空氣質量
    發表于 01-06 06:40

    何用AHT20溫濕度傳感器替代DHT11等芯片呢

    AHT20是什么?AHT20溫濕度傳感器有哪些基本參數?如何用AHT20溫濕度傳感器替代DHT11等芯片呢?
    發表于 01-27 06:27

    AHT20溫濕度傳感器簡介

    目錄一、AHT20溫濕度傳感器簡介二、AHT20 封裝設計三、AHT20 元件設計四、原理圖設計五、總結博客內容:學習溫濕度傳感器原理,閱讀
    發表于 02-14 07:29

    DHT11溫濕度傳感器簡介

    DHT11溫濕度傳感器1、DHT11簡介DHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合
    發表于 02-16 06:55
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>