• Home
Name Date Size #Lines LOC

..--

include/12-May-2024-2911

src/12-May-2024-15073

BUILD.gnD12-May-2024880 2723

README_zh.mdD12-May-20245.3 KiB208129

e53_intelligent_street_lamp_example.cD12-May-20242.3 KiB8440

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_is01/e53_is01_resource_map.jpg)
13
14EEPROM 24C02的设备地址为:0x1010001* ;
15
16## 硬件接口说明
17
18引脚名称开发者可在硬件资源图中查看,也可在智慧路灯模块背面查看。
19
20| 引脚名称 | 功能描述              |
21| :------- | :-------------------- |
22| PWM_LED  | LED控制线,高电平有效 |
23| I2C_SCL  | I2C时钟信号线         |
24| I2C-SDA  | I2C数据信号线         |
25| GND      | 电源地引脚            |
26| 3V3      | 3.3V电源输入引脚      |
27| GND      | 电源地引脚            |
28| 5V       | 5V电源输入引脚        |
29
30## 硬件设计
31
32硬件电路如下图所示:
33![智能路灯模块硬件电路图](/vendor/lockzhiner/lingpi/docs/figures/e53_is01/lz_e53_is01_sch.jpg)
34模块整体硬件电路如上图所示,电路中包含了E53接口连接器,EEPROM存储器、光线传感器, 大功率LED灯驱动电路,其中EEPROM存储器、光线传感器为数字接口芯片,直接使用I2C总线控制,电路简单,本文不再过多说明。
35
36本文主要介绍大功率LED灯驱动原理,这边采用PT4211E23E芯片作为LED灯的驱动芯片,其是一款连续导通型的电感降压转换器,可以用于驱动单个或者多个串联的LED灯,输出电流高达350mA,输出电流可通过电阻R6进行调整,也可通过DIM引脚调整输出平均电流 从而达到调整LED灯的亮度。
37
38根据案例场景应用,我们这边仅是模拟IOT物联网中的智能路灯案例, LED灯无需太亮,过亮的灯光可能对眼睛造成一定程度的影响,影响开发者进行功能调试,故这边通过电阻R6将LED灯的驱动电流限制的很小,同时有个问题,驱动器输出的是5V的驱动电压,但LED灯是3.3V标准的大功率LED灯,故我们在设计时也不能将驱动器输出功率设置的太大,否则容易影响LED灯的寿命。
39
40### 硬件连接
41
42小凌派开发板与模块均带有防呆设计,故很容易区分安装方向,直接将模块插入到开发板的E53母座接口上即可,安装图如下所示:
43![智慧路灯模块硬件连接图](/vendor/lockzhiner/lingpi/docs/figures/e53_is01/e53_is01_connection_diagram.png)
44
45## 程序设计
46
47### API分析
48
49**头文件:**
50
51/vendor/lockzhiner/lingpi/samples/e53_intelligent_street_lamp/include/e53_intelligent_street_lamp.h
52
53#### e53_isl_init()
54
55```c
56void e53_isl_init();
57```
58
59**描述:**
60
61智慧路灯模块初始化,包括初始化I2C0、路灯控制GPIO;初始化BH1750传感器。
62
63**参数:**
64
6566
67**返回值:**
68
6970
71#### e53_isl_read_data()
72
73```c
74float e53_isl_read_data();
75```
76
77**描述:**
78
79智慧路灯模块读取传感器数据,得到亮度值。
80
81**参数:**
82
8384
85**返回值:**
86
87传感器返回的亮度值。
88
89#### isl_light_set_status()
90
91```c
92void isl_light_set_status(SWITCH_STATUS_ENUM status);
93```
94
95**描述:**
96
97智慧路灯模块控制路灯开关。
98
99**参数:**
100
101| 名字   | 描述                      |
102| :----- | :------------------------ |
103| status | 路灯状态,ON:开;OFF:关 |
104
105**返回值:**
106
107108
109### BH1750传感器指令集
110
111![BH1750传感器指令集](/vendor/lockzhiner/lingpi/docs/figures/e53_is01/bh1750_cmd.png)
112
113#### init_bh1750()
114
115```c
116void init_bh1750();
117```
118
119**描述:**
120
121智慧路灯模块初始化bh1750传感器,通过I2C总线下发通电指令集。
122
123**参数:**
124
125126
127**返回值:**
128
129130
131#### start_bh1750()
132
133```c
134void start_bh1750();
135```
136
137**描述:**
138
139智慧路灯模块使能bh1750传感器开启测量,通过I2C总线下发连续H分辨率模式指令集。
140
141**参数:**
142
143144
145**返回值:**
146
147148
149### 主要代码分析
150
151在e53_isl_thread函数中,每2s读取一次传感器数据并打印亮度数据。当亮度小于20时,打开路灯,否则关闭路灯。
152
153```c
154void e53_isl_thread()
155{
156    float lum = 0;
157
158    e53_isl_init();
159
160    while (1)
161    {
162        lum = e53_isl_read_data();
163
164        printf("luminance value is %.2f\n", lum);
165
166        if (lum < 20)
167        {
168            isl_light_set_status(ON);
169            printf("light on\n");
170        }
171        else
172        {
173            isl_light_set_status(OFF);
174            printf("light off\n");
175        }
176
177        LOS_Msleep(2000);
178    }
179}
180```
181
182## 编译调试
183
184### 修改 BUILD.gn 文件
185
186修改 `vendor/lockzhiner/lingpi/sample` 路径下 BUILD.gn 文件,指定 `c3_e53_intelligent_street_lamp` 参与编译。
187
188```r
189"c3_e53_intelligent_street_lamp",
190```
191
192在主目录下输入编译命令。
193
194```shell
195hb build -f
196```
197
198### 运行结果
199
200例程代码编译烧写到开发板后,按下开发板的RESET按键,通过串口软件查看日志,串口会打印光照强度信息;用手遮挡传感器,使亮度值小于20时,路灯亮起;移开遮挡,亮度值大于20时,路灯关闭。
201
202```
203luminance value is 45.83
204light off
205luminance value is 4.17
206light on
207```
208