基于RT-Thread的智慧路灯案例实验分享

前言
之前在网上看到了很多类似的实践,都蛮受大家欢迎的。那咱们就再来一个类似的实验:基于rt-thread的智慧路灯案例实验。
实验框图
实验说明:设备终端不断采集光强数据并上传至云端进行监控,同时也会把当前led(路灯)的状态上传。led的状态会根据光照值进行打开、关闭。
比如当光照值低于(夜晚)我们设置的光照阈值时就会打开led,当光照高于(白天)光照阈值时就会熄灭led灯。除此之外,云端可以远程控制led的亮灭,达到一个远程控制的作用。
创建rtt工程
硬件:小熊派开发板。
软件:基于rt-thread操作系统的应用开发。
开发工具:rt-thread studio v1.1.0。
本实验我们需要用到rt-thread的bh1750软件包、onenet软件包及at_device软件包等。这些软件包的使用已经在前两篇笔记中有写到:
【rt-thread笔记】bh1750软件包的使用
【rt-thread笔记】onenet软件包的使用
本次实验也只是把它们融合在一起来使用。
1、添加相关软件包、配置:
添加完之后的rt-thread settings文件如:
添加软件包及软件包的一些详细配置可查阅上两篇笔记。这里也大概提一下要点:
(1)设置wifi信息:
(2)设置onenet信息
(3)配置i2c对接bh1750
这里我用的是rt-thread studio v1.1.0,这里的i2c的范例配置有点问题,其它版本的rt-thread studio应该可以按范例配置那么配,如果按范例配置编译不通过的话可以按照i2c2那样配置。
2、应用代码
(1)测试函数
左右滑动查看全部代码>>>
intonenet_upload_example(void) { rt_thread_ttid; /*onenet初始化*/ onenet_mqtt_init(); /*绑定led命令响应回调函数*/ onenet_set_cmd_rsp_cb(onenet_ledcmd_rsp_cb); /*创建onenet数据上传任务*/ tid=rt_thread_create(onenet_upload, onenet_upload_entry, rt_null, 2048, 10, 5); if(tid) rt_thread_startup(tid); return0; } msh_cmd_export(onenet_upload_example,senddatatoonenetcloudcycle);
首先进行一个onenet初始化,这个初始化接口时onenet软件包提供的。
接着进行一个led命令响应回调函数的绑定,回调函数onenet_ledcmd_rsp_cb里进行的就是接收到onenet下发的led命令之后进行地一些操作。最后就是创建一个onenet数据上传的线程。
最后把这个函数以命令的形式导出,以便我们可以在命令行输入onenet_upload_example命令进行测试。
(2)led命令响应回调函数
左右滑动查看全部代码>>>
staticvoidonenet_ledcmd_rsp_cb(uint8_t*recv_data,size_trecv_size,uint8_t**resp_data,size_t*resp_size) { charres_buf[20]={0}; charrecv_buf[5]={0}; log_d(recvdatais%.*s ,recv_size,recv_data); if(!strncmp((char*)recv_data,ledon,5)) { rt_pin_write(sc1_led_pin,sc1_led_on); rt_snprintf(res_buf,sizeof(res_buf),ledison); rt_kprintf(ledison ); } elseif(!strcmp((char*)recv_data,ledoff,5)) { rt_pin_write(sc1_led_pin,sc1_led_off); rt_snprintf(res_buf,sizeof(res_buf),ledisoff); rt_kprintf(ledisoff ); } else { rt_kprintf(ledcmderror! ); } /*userhavetomallocmemoryforresponsedata*/ *resp_data=(uint8_t*)rt_malloc(strlen(res_buf)); strncpy((char*)*resp_data,res_buf,strlen(res_buf)); *resp_size=strlen(res_buf); }
我们收到onenet下发的命令之后,所需要做的操作放在这里面。比如当我们的设备接收到ledon字符串时,打开led,并打印提示信息。最后再把led is on信息应答给onenet。
(3)上传数据的任务
左右滑动查看全部代码>>>
/*上传数据至onenet*/ staticvoidonenet_upload_entry(void*parameter) { rt_device_tdev=rt_null; structrt_sensor_datadata; rt_size_tres; charled_status=sc1_led_off; charsend_buf[32]={0}; /*设置高亮led的引脚为输出模式*/ rt_pin_mode(sc1_led_pin,pin_mode_output); /*查找bh1750传感器*/ dev=rt_device_find(li_bh1750); if(dev==rt_null) { rt_kprintf(can'tfinddevice:li_bh1750 ); return; } /*以只读模式打开bh1750*/ if(rt_device_open(dev,rt_device_flag_rdonly)!=rt_eok) { rt_kprintf(opendevicefailed!); return; } while(1) { /*从传感器读取一个数据*/ res=rt_device_read(dev,0,&data,1); if(1!=res) { rt_kprintf(readdatafailed!sizeis%d,res); } else { rt_kprintf(light:%4d.%dlux ,data.data.light/10,data.data.light%10); rt_sprintf(send_buf,%4d.%d,data.data.light/10,data.data.light%10); } /*高亮led灯根据光照值自动打开、熄灭*/ if(data.data.light/10<=40) { rt_pin_write(sc1_led_pin,sc1_led_on); led_status=sc1_led_on; rt_kprintf(led_status=on ); } else { rt_pin_write(sc1_led_pin,sc1_led_off); led_status=sc1_led_off; rt_kprintf(led_status=off ); } /*上传光照数据至onenet*/ if(onenet_mqtt_upload_string(light,(constchar*)send_buf)<0) { log_e(uploadhasanerror,stopuploading); break; } /*上传高亮led灯的状态至onenet*/ if(onenet_mqtt_upload_string(led_status,(constchar*)ledsta_str[led_status])<0) { log_e(uploadhasanerror,stopuploading); break; } rt_thread_delay(rt_tick_from_millisecond(3*1000)); } rt_device_close(dev); }
这是我们的上传任务:读取bh1750传感器采集的光照值,通过onenet软件包给我们提供的onenet_mqtt_upload_string接口上传至onenet。
同时,led的状态根据光照值的结果自动打开/关闭,led的状态也是通过onenet_mqtt_upload_string接口传至onenet。
3、onenet云端web应用
(1)创建一个web应用
为了能更好地、更直观的展示我们的数据,我们创建一个web应用来管理:
onenet构建web应用的方式与之前我们分享的《智慧农业案例实验分享》中华为云构建web应用的方式类似,都是通过拖控件的方式。我们创建好的应用如下:
实验结果

TouchStone (SNP,S2P) 格式详解
如何使用微处理器复位电压检测器IC降低线圈的保持电流
剖析FPGA的高精度电磁信号采集系统设计
飞利浦发布新款入耳式真无线高级耳机
一文解析BF518F Blackfin处理器开发评估方案
基于RT-Thread的智慧路灯案例实验分享
手机配置看重内存和硬盘,电脑配置首看CPU和显卡
arduino童芯派彩屏显示图片,图片取模后在TFT液晶显示
英特尔推出Hybrid Bonding技术 推进高端封装演进
中国在5G发展方面处于领先地位美国或将在这场竞赛中落后
英伟达公司近年股价走势,人工智能芯片初创公司数量爆炸式增长
早下手早享受:818发烧节,细数那些值得入的全画幅单反
下一代欺骗技术——早期威胁检测
不论是不是力帆,选择代工才是车和家的当务之急
数字电源时序器的内部结构与数字电源时序器的常见故障
为什么工业互联网如此之热?
基于应用程序编程接口(API)的自动化测试(上)
滤波器的详细分类
无人值守变电站综合监控系统的作用、组成及电力加密网关的特点
家庭音响+互联网,玩起新创意