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温湿度数据的有效采集。这一成果的达成,充分展现了共创社成员对嵌入式研发的探索精神。期待这一实践经历能够为更多的嵌入式爱好者提供有价值的参考借鉴。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2550

    文章

    50988

    浏览量

    752948
  • 嵌入式
    +关注

    关注

    5082

    文章

    19093

    浏览量

    304604
  • Linux
    +关注

    关注

    87

    文章

    11277

    浏览量

    209263
  • 开发板
    +关注

    关注

    25

    文章

    5024

    浏览量

    97352
收藏 人收藏

    评论

    相关推荐

    机房温湿度环境监控系统用POE供电网络型温湿度传感器

    产品关键词:RJ45网口温湿度传感器,TCP/IP协议温湿度变送器,网口网络型温湿度采集模块,机房POE交换机供电型
    发表于 10-10 13:41

    采用数字温湿度传感器的多点温湿度报警系统设计

    构成  1.1 系统原理  实验室多点温湿度报警系统原理框图如图1所示,由低性价比单片机对数字温湿度传感器控制,通过模拟温度传感器通讯时序,实现对
    发表于 11-13 10:53

    基于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温湿度传感器简介

    目录一、AHT20温湿度传感器简介二、AHT20 封装设计三、AHT20 元件设计四、原理图设计五、总结博客内容:学习温湿度传感器原理,阅读
    发表于 02-14 07:29

    DHT11温湿度传感器简介

    DHT11温湿度传感器1、DHT11简介DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合
    发表于 02-16 06:55

    温湿度传感器的三大安装事项

    为了更加精准的监测到生活中的温湿度,我们的人工达不到大家对温湿度的准确性的要求,这个时候就需要用到温湿度传感器了,温湿度
    的头像 发表于 02-21 19:43 8979次阅读

    温湿度传感器的原理

    温湿度传感器是指能将温度量和湿度量转换成容易被测量处理的电信号的设备或装置。市场上的温湿度传感器一般是测量温度量和相对
    发表于 05-11 14:59 1.8w次阅读

    什么是温湿度传感器_温湿度传感器如何安装

     很多的人们对于温湿度传感器的安装是不了解的,不知道该怎么样安装,其实安装温湿度传感器是比较方便的。要注意安装的细节问题和安装的技巧,那么温湿度
    发表于 05-26 09:24 4739次阅读

    温湿度变送器or温湿度传感器,我们应该如何选择

    在我们需要检测一项数据时,往往需要传感器的帮助。比如需要测量温度、湿度、压力、光照、气体等,便会需要传感器的支持。在这些传感器中,使用较为广
    发表于 05-13 17:10 1087次阅读

    温湿度传感器工作原理 温湿度传感器的接线方法

    温湿度传感器是一种用于测量环境温度和相对湿度的装置。它通常用于工业、农业、气象、室内空调等领域。本文将详细介绍温湿度传感器的工作原理和接线方
    的头像 发表于 02-14 18:00 9282次阅读