1# 小凌派-RK2206开发板OpenHarmonyOS开发-智慧路灯 2 3## 实验内容 4 5本例程演示如何在小凌派-RK2206开发板上实现智慧路灯的应用案例。 6 7 8 9## 硬件资源 10 11硬件资源图如下所示: 12 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 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 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 65无 66 67**返回值:** 68 69无 70 71#### e53_isl_read_data() 72 73```c 74float e53_isl_read_data(); 75``` 76 77**描述:** 78 79智慧路灯模块读取传感器数据,得到亮度值。 80 81**参数:** 82 83无 84 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 107无 108 109### BH1750传感器指令集 110 111 112 113#### init_bh1750() 114 115```c 116void init_bh1750(); 117``` 118 119**描述:** 120 121智慧路灯模块初始化bh1750传感器,通过I2C总线下发通电指令集。 122 123**参数:** 124 125无 126 127**返回值:** 128 129无 130 131#### start_bh1750() 132 133```c 134void start_bh1750(); 135``` 136 137**描述:** 138 139智慧路灯模块使能bh1750传感器开启测量,通过I2C总线下发连续H分辨率模式指令集。 140 141**参数:** 142 143无 144 145**返回值:** 146 147无 148 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