当前位置: 首页 > news >正文

【星闪技术】WS63E模块实时显示当前环境温湿度

引言

今天来测试一下润和星闪开发套件中的温湿度功能。

程序分析

润和星闪开发套件所使用的外设板块和润和智能家居套件所采用的基本相同,所以润和提供的WS63E测试程序和hi3861的程序基本相同。。SSD1306和温湿度传感器AHT20都是基于I2C接口的,I2C是一种串行通信协议,允许将多个设备连接到一条总线上。每个连接到总线上的器件都有唯一地址,任何器件既可作为主机也可以作为从机,但同一时刻只允许有一个主机。

 

aht20_test.c

这段代码是一个嵌入式程序,用于在OLED显示屏上显示温湿度信息。它使用了I2C通信协议与AHT20温湿度传感器进行数据交互,并在OLED屏幕上显示这些数据。下面是对代码的分析:

  1. headSize数组定义了OLED屏幕的宽度和高度,这里都是64像素。

  2. app_i2c_init_pin函数初始化I2C通信的引脚。

  3. TempHumChinese函数用于在OLED屏幕上绘制中文字符“温”和“度”以及“湿”和“度”。这些字符的字模数据是从左到右、从上到下排列的,使用的是横向8位左高位的取模方式。字模数据被存储在fontsfonts2数组中,每个字符占用32个字节,对应16x16像素的显示。

  4. Aht20TestTask函数是程序的主循环,它初始化I2C和OLED屏幕,然后不断循环读取AHT20传感器的温湿度数据,并在OLED屏幕上显示这些数据。温度和湿度的数据显示在屏幕的特定位置,并且每秒钟更新一次。

  5. Aht20Test函数创建了一个任务来运行Aht20TestTask函数。

  6. app_run函数调用Aht20Test来启动整个程序的运行。

代码中使用了ssd1306_DrawRegion函数来在OLED屏幕上绘制字模,ssd1306_DrawString函数来绘制字符串,以及ssd1306_UpdateScreen函数来更新屏幕显示。

此外,代码中还包含了一些用于初始化I2C通信和AHT20传感器的函数,如uapi_i2c_master_initAHT20_Calibrate

整体来看,这段代码是一个完整的嵌入式应用程序,用于从AHT20传感器读取温湿度数据,并在OLED屏幕上以中文字符显示这些数据。

 aht20.c

这段代码是用于与AHT20温湿度传感器进行通信的嵌入式程序。AHT20是一款集成了相对湿度和温度传感器的模块,它通过I2C接口与微控制器通信。下面是对代码的分析:

  1. 定义了一系列宏来表示AHT20传感器的不同命令和状态位。例如,AHT20_CMD_TRIGGER是触发测量的命令,AHT20_CMD_RESET是软复位命令。

  2. AHT20_STATUS_BUSY_SHIFTAHT20_STATUS_MODE_SHIFTAHT20_STATUS_CALI_SHIFT定义了状态字节中不同位的偏移量。

  3. AHT20_STATUS_BUSY_MASKAHT20_STATUS_MODE_MASKAHT20_STATUS_CALI_MASK定义了用于提取状态位的掩码。

  4. AHT20_STATUS_RESPONSE_MAX定义了状态命令回复的最大字节数。

  5. AHT20_RESLUTION定义了传感器数据的分辨率,即2的20次方。

  6. AHT20_MAX_RETRY定义了在读取数据时的最大重试次数。

  7. CONFIG_I2C_MASTER_BUS_IDI2C_SLAVE1_ADDR定义了I2C总线ID和AHT20传感器的I2C地址。

  8. aht20_status_busyaht20_status_modeaht20_status_cali函数用于从状态字节中提取不同的状态信息。

  9. AHT20_ReadAHT20_Write函数用于通过I2C接口读取和写入数据。

  10. AHT20_StatusCommand函数发送获取状态的命令。

  11. AHT20_ResetCommand函数发送软复位命令。

  12. AHT20_CalibrateCommand函数发送初始化校准命令。

  13. AHT20_Calibrate函数用于校准传感器。如果校准使能位不是1,它会发送初始化命令并等待校准完成。

  14. AHT20_StartMeasure函数发送触发测量命令,开始测量温湿度。

  15. AHT20_GetMeasureResult函数用于读取测量结果,并将原始数据转换为标准的温度和湿度值。它还会检查传感器是否忙碌,并在必要时重试读取数据。

代码中使用了osDelay函数来实现延时,这可能是一个操作系统提供的函数,用于在读取数据前等待传感器完成测量。

整体来看,这段代码提供了完整的流程来初始化、校准、测量和读取AHT20传感器的数据。它处理了传感器的忙碌状态,并在读取数据时进行了错误处理。

ssd1306.c

这段代码是用于控制SSD1306 OLED显示屏的C语言库。SSD1306是一款常用的OLED驱动芯片,广泛应用于小型显示项目中。以下是对代码主要功能的分析:

  1. ssd1306_Reset(void)

    • 该函数通过延时1毫秒来重置OLED屏幕。这个延时对于屏幕启动非常重要。
  2. ssd1306_SendData(uint8_t *buffer, uint32_t size)

    • 该函数通过I2C接口发送数据到OLED屏幕。它接受一个数据缓冲区和大小,然后通过I2C写入这些数据。
  3. ssd1306_WiteByte(uint8_t regAddr, uint8_t byte)

    • 该函数用于向OLED屏幕的特定寄存器地址写入单个字节。
  4. ssd1306_WriteCommand(uint8_t byte)

    • 该函数发送命令到OLED屏幕的命令寄存器。
  5. ssd1306_WriteData(uint8_t *buffer, uint32_t buff_size)

    • 该函数将数据写入OLED屏幕的数据寄存器。它还会添加控制字节,以指示数据的开始。
  6. SSD1306_Buffer

    • 这是一个静态数组,用作屏幕的缓冲区。
  7. SSD1306

    • 这是一个静态结构体,保存了OLED屏幕的状态和配置。
  8. ssd1306_FillBuffer(uint8_t *buf, uint32_t len)

    • 该函数用固定长度的缓冲区填充屏幕缓冲区。
  9. ssd1306_Init_CMD(void)

    • 该函数初始化OLED屏幕的命令设置,包括显示模式、时钟分频、预充电周期等。
  10. ssd1306_Init(void)

    • 该函数初始化OLED屏幕,包括重置屏幕、设置内存地址模式、设置对比度等。
  11. ssd1306_Fill(SSD1306_COLOR color)

    • 该函数用指定颜色填充整个屏幕缓冲区。
  12. ssd1306_UpdateScreen(void)

    • 该函数将屏幕缓冲区的内容更新到OLED屏幕上。
  13. ssd1306_DrawPixel(uint8_t x, uint8_t y, SSD1306_COLOR color)

    • 该函数在屏幕缓冲区中绘制单个像素。
  14. ssd1306_DrawChar(char ch, FontDef Font, SSD1306_COLOR color)

    • 该函数在屏幕缓冲区中绘制单个字符。
  15. ssd1306_DrawString(char *str, FontDef Font, SSD1306_COLOR color)

    • 该函数在屏幕缓冲区中绘制字符串。
  16. ssd1306_SetCursor(uint8_t x, uint8_t y)

    • 该函数设置光标位置。
  17. ssd1306_DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, SSD1306_COLOR color)

    • 该函数使用Bresenham算法绘制直线。
  18. ssd1306_DrawPolyline(const SSD1306_VERTEX *par_vertex, uint16_t par_size, SSD1306_COLOR color)

    • 该函数绘制多边形线。
  19. ssd1306_DrawCircle(uint8_t par_x, uint8_t par_y, uint8_t par_r, SSD1306_COLOR par_color)

    • 该函数使用Bresenham算法绘制圆形。
  20. ssd1306_DrawRectangle(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, SSD1306_COLOR color)

    • 该函数绘制矩形。
  21. ssd1306_DrawBitmap(const uint8_t *bitmap, uint32_t size)

    • 该函数绘制位图。
  22. ssd1306_DrawRegion(uint8_t x, uint8_t y, uint8_t w, const uint8_t *data, uint32_t size)

    • 该函数在指定区域绘制数据。
  23. ssd1306_SetContrast(const uint8_t value)

    • 该函数设置屏幕对比度。
  24. ssd1306_SetDisplayOn(const uint8_t on)

    • 该函数打开或关闭OLED屏幕显示。
  25. ssd1306_ClearOLED(void)

    • 该函数清空OLED屏幕。
  26. ssd1306_printf(char *fmt, ...)

    • 该函数格式化并打印字符串到OLED屏幕。

整体来看,这段代码提供了一套完整的函数库,用于初始化、配置和在SSD1306 OLED屏幕上绘制各种图形和文本。代码中使用了I2C通信协议与OLED屏幕进行数据交换,并通过屏幕缓冲区来管理显示内容。

操作步骤

  1. 将vendor/HiHope_NearLink_DK_WS63E_V03/demo/environment复制到\src\application\samples\peripheral文件夹下。
  2. 在src\application\samples\peripheral\CMakeLists.txt文件中新增编译案例,可以在“set(SOURCES "${SOURCES}" PARENT_SCOPE)”上面一行添加。
    if(DEFINED CONFIG_SAMPLE_SUPPORT_ENVIRONMENT)add_subdirectory_if_exist(environment)
    endif()
  3. 在src\application\samples\peripheral\Kconfig文件中新增编译案例,可以在最后一行添加。
    config SAMPLE_SUPPORT_ENVIRONMENTboolprompt "Support ENVIRONMENT Sample."default ndepends on ENABLE_PERIPHERAL_SAMPLEhelp This option means support ENVIRONMENT Sample.   
  4. 在menuconfig中选择“Application/Enable the Sample of peripheral”,在弹出框中选择“support ENVIRONMENT Sample”,点击Save,关闭弹窗。
  5. 重新编译程序,然后烧写程序即可。

     

测试结果

软件烧录成功后,按一下开发板的RESET按键复位开发板,板上小屏幕实时显示环境温度和湿度。

a9e4a45907a04fa8a959bf2dd271767d.png

结语

由于和hi3861的程序几乎完全相同,这个测试也比较顺利。后面再测试一下雷达模块,然后就可以将几个模块整合到一起了。

 


http://www.mrgr.cn/news/55764.html

相关文章:

  • 程序员的浪漫之给对象爬数据,没想到过程中竟然被写接口的老哥字段命名给秀到了!
  • filebeat接入nginx和mysql获取日志
  • 机器学习核心:监督学习与无监督学习
  • WebGoat SQL Injection (intro) 源码分析
  • leetcode.204.计数质数
  • C++简介和基本语法介绍
  • ARL 灯塔 | CentOS7 — ARL 灯塔搭建流程(Docker)
  • AI学习指南深度学习篇-对比学习(Contrastive Learning)简介
  • 用malloc申请空间的开辟和free空间的释放
  • 计算机网络基本命令
  • 《深度学习》 了解YOLO基本知识
  • Java全栈经典面试题剖析2】JavaSE面向对象1
  • 复盘秋招22场面试(四)形势重新评估与后续措施
  • 【论文学习与撰写】,论文word文档中出现乱码的情况,文档中显示的乱码,都是英文字母之类的,但打印预览是正常的
  • ARL 灯塔 | ARL 灯塔 — 指纹添加
  • Java最全面试题->Java主流框架->Srping面试题
  • JavaSE——IO流4:高级流(转换流InputStreamReader、OutputStreamWriter)
  • 点云处理中的三种近邻搜索方法:K近邻、体素内近邻和半径内近邻搜索
  • OpenSEMBA :一个用于电磁场模拟的开源软件框架
  • 论文阅读——Restormer
  • 11. 事件机制
  • 034_基于php万怡酒店管理系统
  • 如何在 CentOS 7 上使用 Nginx 将 www 重定向到非 www
  • Docker安装Mysql数据库
  • XMLHttpRequest和FormData下载文件,ajax下载文件
  • 035_基于php助农生鲜销售系统的设计与实现