Name | Date | Size | #Lines | LOC | ||
---|---|---|---|---|---|---|
.. | - | - | ||||
include/ | 12-May-2024 | - | 38 | 17 | ||
src/ | 12-May-2024 | - | 327 | 181 | ||
BUILD.gn | D | 12-May-2024 | 880 | 27 | 23 | |
README_zh.md | D | 12-May-2024 | 9.2 KiB | 373 | 240 | |
e53_intelligent_agriculture_example.c | D | 12-May-2024 | 2.7 KiB | 98 | 51 |
README_zh.md
1# 小凌派-RK2206开发板OpenHarmonyOS开发-智慧农业 2 3## 实验内容 4 5本例程演示如何在小凌派-RK2206开发板上实现智慧农业的应用案例。 6 7 8 9## 硬件资源 10 11硬件资源图如下所示: 12 13 14其中,温湿度传感器SHT30的设备地址为:0x0100010* ; 15光线传感器BH1750FVI的设备地址为:0x0100011* ; 16EEPROM 24C02的设备地址为:0x1010001* 。 17 18## 硬件接口说明 19 20引脚名称开发者可在硬件资源图中查看,也可在智慧农业模块背面查看。 21 22| 引脚名称 | 功能描述 | 23| :-------- | :---------------------- | 24| LED_CTR | LED灯控制线,高电平有效 | 25| MOTOR_CTR | 电机控制线,高电平有效 | 26| I2C_SCL | I2C时钟信号线 | 27| I2C-SDA | I2C数据信号线 | 28| GND | 电源地引脚 | 29| 3V3 | 3.3V电源输入引脚 | 30| GND | 电源地引脚 | 31| 5V | 5V电源输入引脚 | 32 33## 硬件设计 34 35硬件电路如下图所示: 36 37 38 39整体电路中包含了E53接口连接器,EEPROM存储器、光线传感器,温湿度传感器,LED灯以及电机控制电路。其中,EEPROM存储器、光线传感器和温湿度传感器均为数字接口芯片,直接使用I2C总线控制,电路简单,本文不做过多的说明。 40 41本文主要介绍马达和LED灯控制原理。LED灯和马达均使用三极管S8050驱动,S8050为NPN管,当LED_CTR为高电平时三极管Q3导通,D1亮;由于马达属于感性线圈,在实际电路工作中对整个电路的干扰比较大,为保证整体系统的稳定性,马达控制增加了一路光耦隔离器,光耦隔离器采用TLP521-1GB,当控制信号MOTOR_CTR为高电平时,光耦导通,进而三极管Q1导通,驱动马达转动。 42 43### 硬件连接 44 45小凌派开发板与模块均带有防呆设计,故很容易区分安装方向,直接将模块插入到开发板的E53母座接口上即可,安装图如下所示: 46 47 48## 程序设计 49 50### API分析 51 52**头文件:** 53 54/vendor/lockzhiner/lingpi/samples/e53_intelligent_agriculture/include/e53_intelligent_agriculture.h 55 56#### e53_ia_init() 57 58```c 59void e53_ia_init(); 60``` 61 62**描述:** 63 64智慧农业模块初始化,包括初始化I2C0、紫光灯GPIO、电机GPIO;初始化BH1750传感器和SHT30传感器。 65 66**参数:** 67 68无 69 70**返回值:** 71 72无 73 74#### e53_ia_read_data() 75 76```c 77void e53_ia_read_data(e53_ia_data_t *pData); 78``` 79 80**描述:** 81 82智慧农业模块读取传感器数据。 83 84**参数:** 85 86| 名字 | 描述 | 87| :---- | :------------------------------------- | 88| pData | 读取的传感器数据,包括亮度、温度和湿度 | 89 90**返回值:** 91 92无 93 94#### light_set() 95 96```c 97void light_set(SWITCH_STATUS_ENUM status); 98``` 99 100**描述:** 101 102智慧农业模块控制紫光灯开关。 103 104**参数:** 105 106| 名字 | 描述 | 107| :----- | :-------------------------- | 108| status | 紫光灯状态,ON:开;OFF:关 | 109 110**返回值:** 111 112无 113 114#### motor_set_status() 115 116```c 117void motor_set_status(SWITCH_STATUS_ENUM status); 118``` 119 120**描述:** 121 122智慧农业模块控制电机开关。 123 124**参数:** 125 126| 名字 | 描述 | 127| :----- | :------------------------ | 128| status | 电机状态:ON:开;OFF:关 | 129 130**返回值:** 131 132无 133 134### BH1750传感器指令集 135 136 137 138#### init_bh1750() 139 140```c 141void init_bh1750(); 142``` 143 144**描述:** 145 146智慧路灯模块初始化bh1750传感器,通过I2C总线下发通电指令集。 147 148**参数:** 149 150无 151 152**返回值:** 153 154无 155 156#### start_bh1750() 157 158```c 159void start_bh1750(); 160``` 161 162**描述:** 163 164智慧路灯模块使能bh1750传感器开启测量,通过I2C总线下发连续H分辨率模式指令集。 165 166**参数:** 167 168无 169 170**返回值:** 171 172无 173 174#### init_sht30() 175 176```c 177void init_sht30(); 178``` 179 180**描述:** 181 182智慧农业模块初始化SHT30传感器,设置测量周期,通过I2C总线下发测量周期命令0x2236,选择高重复性测量,每秒测量2次。 183 184 185 186**参数:** 187 188无 189 190**返回值:** 191 192无 193 194#### sht30_check_crc() 195 196```c 197uint8_t sht30_check_crc(uint8_t *data, uint8_t nbrOfBytes, uint8_t checksum); 198``` 199 200**描述:** 201 202SHT30传感器温度、湿度数据校验。 203 204**参数:** 205 206| 名字 | 描述 | 207| :--------- | :----------- | 208| data | 校验数据指针 | 209| nbrOfBytes | 校验数据长度 | 210| checksum | 校验值 | 211 212**返回值:** 213 214| 返回值 | 描述 | 215| :----- | :------- | 216| 0 | 校验成功 | 217| 1 | 校验失败 | 218 219#### sht30_calc_temperature() 220 221```c 222float sht30_calc_temperature(uint16_t u16sT); 223``` 224 225**描述:** 226 227SHT30传感器计算温度值,计算公式如下。 228 229 230 231**参数:** 232 233| 名字 | 描述 | 234| :---- | :------------------- | 235| u16sT | 读取到的温度原始数据 | 236 237**返回值:** 238 239| 返回值 | 描述 | 240| :---------- | :----------- | 241| temperature | 计算出的温度 | 242 243#### sht30_calc_RH() 244 245```c 246float sht30_calc_RH(uint16_t u16sRH); 247``` 248 249**描述:** 250 251SHT30传感器计算湿度值,计算公式如下。 252 253 254 255**参数:** 256 257| 名字 | 描述 | 258| :----- | :------------------- | 259| u16sRH | 读取到的湿度原始数据 | 260 261**返回值:** 262 263| 返回值 | 描述 | 264| :--------- | :----------- | 265| humidityRH | 计算出的湿度 | 266 267#### e53_ia_read_data() 268 269```c 270void e53_ia_read_data(e53_ia_data_t *pData); 271``` 272 273**描述:** 274 275智慧农业模块读取BH1750传感器两个字节数据,通过公式(MSB<<8 | LSB)/1.2计算得出亮度值。 276 277智慧农业模块读取SHT30传感器数据,通过I2C总线下发读取数据命令0xe000;I2C读取6字节数据,其中第一字节为温度值高位,第二字节为温度值低位,第三字节为温度校验值,第四字节为湿度值高位,第五字节为湿度值低位,第六字节为湿度校验值。分别计算温度、湿度校验值,校验值与温度、湿度校验值一致,则说明数据正确;通过sht30_calc_temperature计算温度值,通过sht30_calc_RH计算湿度值。 278 279 280 281**参数:** 282 283| 名字 | 描述 | 284| :---- | :----------------------------- | 285| pData | 读取的温度、湿度和亮度数据指针 | 286 287**返回值:** 288 289无 290 291### 主要代码分析 292 293在e53_ia_thread函数中,每2s读取一次传感器数据并打印亮度、温度和湿度。当亮度小于20时,打开紫光灯,否则关闭紫光灯;当湿度小于60或者温度大于30时,打开电机,否则关闭电机。 294 295```c 296void e53_ia_thread() 297{ 298 e53_ia_data_t data; 299 300 e53_ia_init(); 301 302 while (1) 303 { 304 e53_ia_read_data(&data); 305 306 printf("\nLuminance is %.2f\n", data.luminance); 307 printf("\nHumidity is %.2f\n", data.humidity); 308 printf("\nTemperature is %.2f\n", data.temperature); 309 310 if (data.luminance < 20) 311 { 312 light_set(ON); 313 printf("light on\n"); 314 } 315 else 316 { 317 light_set(OFF); 318 printf("light off\n"); 319 } 320 321 if ((data.humidity > 60) || (data.temperature > 30)) 322 { 323 motor_set_status(ON); 324 printf("motor on\n"); 325 } 326 else 327 { 328 motor_set_status(OFF); 329 printf("motor off\n"); 330 } 331 LOS_Msleep(2000); 332 } 333} 334``` 335 336## 编译调试 337 338### 修改 BUILD.gn 文件 339 340修改 `vendor/lockzhiner/lingpi/sample` 路径下 BUILD.gn 文件,指定 `c1_e53_intelligent_agriculture` 参与编译。 341 342```r 343"c1_e53_intelligent_agriculture", 344``` 345 346在主目录下输入编译命令。 347 348```shell 349hb build -f 350``` 351 352### 运行结果 353 354例程代码编译烧写到开发板后,按下开发板的RESET按键,通过串口软件查看日志,串口会打印温度、湿度及光照强度信息;用手遮挡智慧农业模块,紫光灯会自动开启;控制温度或者湿度超标,电机会自动开启。 355 356```r 357Luminance is 153.33 358Humidity is 37.69 359Temperature is 21.30 360light on 361motor off 362Luminance is 726.67 363Humidity is 61.02 364Temperature is 20.79 365light off 366motor on 367Luminance is 697.50 368Humidity is 58.78 369Temperature is 20.94 370light off 371motor off 372``` 373