• Home
Name Date Size #Lines LOC

..--

include/12-May-2024-3817

src/12-May-2024-327181

BUILD.gnD12-May-2024880 2723

README_zh.mdD12-May-20249.2 KiB373240

e53_intelligent_agriculture_example.cD12-May-20242.7 KiB9851

README_zh.md

1# 小凌派-RK2206开发板OpenHarmonyOS开发-智慧农业
2
3## 实验内容
4
5本例程演示如何在小凌派-RK2206开发板上实现智慧农业的应用案例。
6
7![小凌派-RK2206开发板](../../docs/figures/lockzhiner-rk2206.jpg)
8
9## 硬件资源
10
11硬件资源图如下所示:
12![智慧农业模块硬件资源](/vendor/lockzhiner/lingpi/docs/figures/e53_ia01/e53_ia01_resource_map.jpg)
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![智慧农业模块硬件电路图](/vendor/lockzhiner/lingpi/docs/figures/e53_ia01/lz_e53_ia01_sch.jpg)
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![智慧农业模块硬件连接图](/vendor/lockzhiner/lingpi/docs/figures/e53_ia01/e53_ia01_connection_diagram.png)
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
6869
70**返回值:**
71
7273
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
9293
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
112113
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
132133
134### BH1750传感器指令集
135
136![BH1750传感器指令集](/vendor/lockzhiner/lingpi/docs/figures/e53_is01/bh1750_cmd.png)
137
138#### init_bh1750()
139
140```c
141void init_bh1750();
142```
143
144**描述:**
145
146智慧路灯模块初始化bh1750传感器,通过I2C总线下发通电指令集。
147
148**参数:**
149
150151
152**返回值:**
153
154155
156#### start_bh1750()
157
158```c
159void start_bh1750();
160```
161
162**描述:**
163
164智慧路灯模块使能bh1750传感器开启测量,通过I2C总线下发连续H分辨率模式指令集。
165
166**参数:**
167
168169
170**返回值:**
171
172173
174#### init_sht30()
175
176```c
177void init_sht30();
178```
179
180**描述:**
181
182智慧农业模块初始化SHT30传感器,设置测量周期,通过I2C总线下发测量周期命令0x2236,选择高重复性测量,每秒测量2次。
183
184![SHT30传感器测量命令](/vendor/lockzhiner/lingpi/docs/figures/e53_ia01/sht30_meas_cmd.png)
185
186**参数:**
187
188189
190**返回值:**
191
192193
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![SHT30传感器计算温度公式](/vendor/lockzhiner/lingpi/docs/figures/e53_ia01/calc_temp.png)
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![SHT30传感器计算湿度公式](/vendor/lockzhiner/lingpi/docs/figures/e53_ia01/calc_lum.png)
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![SHT30传感器读取数据命令](/vendor/lockzhiner/lingpi/docs/figures/e53_ia01/sht30_fetch_data_cmd.png)
280
281**参数:**
282
283| 名字  | 描述                           |
284| :---- | :----------------------------- |
285| pData | 读取的温度、湿度和亮度数据指针 |
286
287**返回值:**
288
289290
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