0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

RTThread物联网操作系统 来源:RTThread物联网操作系统 2020-07-01 14:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

之前在网上看到了很多类似的实践,都蛮受大家欢迎的。那咱们就再来一个类似的实验:基于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", (const char*)send_buf) < 0)         {             LOG_E("upload has an error, stop uploading");             break;         }         /* 上传高亮led灯的状态至onenet */         if (onenet_mqtt_upload_string("led_status", (const char*)ledsta_str[led_status]) < 0)         {             LOG_E("upload has an error, stop uploading");             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应用的方式类似,都是通过拖控件的方式。我们创建好的应用如下:

实验结果

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RT-Thread
    +关注

    关注

    32

    文章

    1540

    浏览量

    44275
  • 智慧路灯
    +关注

    关注

    3

    文章

    920

    浏览量

    18374

原文标题:基于RT-Thread的智慧路灯案例实验分享

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【直播预告】高性价比智慧视觉处理器FH8626V300L解析,与RT-Thread全栈开发实战 | 问学直播

    智慧视觉领域感兴趣,或是行业从业者注意啦!11月13日20:00,RT-Thread携手富瀚微技术专家,为您带来FH8626V300L全栈开发实战线上直播,手把手带你从芯片解读到RT-Thread
    的头像 发表于 11-11 11:53 464次阅读
    【直播预告】高性价比<b class='flag-5'>智慧</b>视觉处理器FH8626V300L解析,与<b class='flag-5'>RT-Thread</b>全栈开发实战 | 问学直播

    首搭RT-Thread程翧车控平台| RT-Thread程翧 S32K344 快速原型开发平台正式上市!| 产品动态

    在智能汽车迈向高集成与高安全的时代,VCU/ECU开发正面临效率与可靠性的双重考验。依赖单一硬件或拼凑软件方案的传统模式,已成为制约创新的瓶颈。为此,RT-Thread带来里程碑式的解决方案
    的头像 发表于 10-31 11:53 483次阅读
    首搭<b class='flag-5'>RT-Thread</b>程翧车控平台| <b class='flag-5'>RT-Thread</b>程翧 S32K344 快速原型开发平台正式上市!| 产品动态

    rt-thread studio 导入BSP 失败怎么解决?

    rt-thread studio 手动导入bsp 失败。 版本: 2.2.8 构建ID: 202405200930 导入的bsp 是直接从rt-thread 代码仓库下载的 .log
    发表于 10-11 11:07

    2025年RT-Thread开发者巡回培训报名正式启动!

    亲爱的RT-Thread社区成员们:新程再启,共赴热爱!2025年RT-Thread开发者巡回培训正式启动报名!今年,我们选择了西安、武汉、北京、杭州、深圳、上海、成都这7座城市,为大家带来
    的头像 发表于 09-27 10:39 1140次阅读
    2025年<b class='flag-5'>RT-Thread</b>开发者巡回培训报名正式启动!

    rt-thread studio 2.2.9如何使用最新的RT-Thread v5.2.0 released?

    rt-thread studio2.2.9如何使用最新的RT-Thread v5.2.0 released? 原先以为修改index_all.json,发现联网的时候,会自动覆盖 另lastet版本
    发表于 09-16 06:06

    在Ubuntu上开发基于先楫MCU的RT-Thread应用指南

    1、前言RT-ThreadEnv是RT-Thread推出的开发辅助工具,针对基于RT-Thread操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的menuconfig
    的头像 发表于 08-29 12:22 1228次阅读
    在Ubuntu上开发基于先楫MCU的<b class='flag-5'>RT-Thread</b>应用指南

    【好书推荐】RT-Thread第20本相关书籍!《嵌入式实时操作系统RT-Thread原理与应用》| 技术集结

    01内容简介ContentSummary本书为读者提供了一个全面、系统的RT-Thread学习指南,旨在帮助初学者及有经验的开发者掌握RT-Thread实时操作系统和STM32嵌入式微控制器的核心
    的头像 发表于 08-24 10:05 685次阅读
    【好书推荐】<b class='flag-5'>RT-Thread</b>第20本相关书籍!《嵌入式实时操作系统<b class='flag-5'>RT-Thread</b>原理与应用》| 技术集结

    RT-Thread 遇上 Rust:安全内核 RusT-Thread 的诞生

    大家好,我们是中国科学技术大学操作系统原理与设计(H)课oooooS小组。这个项目是我们的课程大作业:参考RT-Thread架构,使用Rust搭建一个原生的嵌入式操作系统内核。初识Rust是因为xk
    的头像 发表于 08-02 11:03 3206次阅读
    <b class='flag-5'>RT-Thread</b> 遇上 Rust:安全内核 RusT-<b class='flag-5'>Thread</b> 的诞生

    RT-Thread荣获2025优秀开源项目 | 新闻速递

    6月底,RT-Thread睿赛德受邀参与由上海开源信息技术协会主办的2025上海开源创新精英荟。上海市商委副主任张杰出席会议并致辞。RT-Thread嵌入式操作系统项目凭借其卓越的技术创新与开源生态
    的头像 发表于 07-04 09:04 2431次阅读
    <b class='flag-5'>RT-Thread</b>荣获2025优秀开源项目 | 新闻速递

    深度剖析 RT-Thread 线程调度流程

    RT-Thread调度第一个线程的主要流程分如下:rtthread_startup:RTT的启动函数,主要负责板级驱动,调度器,系统线程初始化,启动调度的工作
    的头像 发表于 06-25 18:24 1437次阅读
    深度剖析 <b class='flag-5'>RT-Thread</b> 线程调度流程

    揭秘RT-Thread上的AUTOSAR CP系统

    本文探讨了RT-Thread与AUTOSARCP的融合,解决车载ECU开发中实时性、安全性与灵活性的平衡问题。通过分层安全内核(rt-safetyos/autoos)和工具链整合,兼容AUTOSAR
    的头像 发表于 06-23 20:22 2944次阅读
    揭秘<b class='flag-5'>RT-Thread</b>上的AUTOSAR CP系统

    玄铁加入RT-Thread 高级会员合作伙伴 | 战略新篇

    今天起,玄铁XuanTie正式成为RT-Thread高级会员合作伙伴。此次合作标志着双方将在嵌入式操作系统创新、RISC-V生态构建及行业应用落地等领域展开深度协同,加速推动开源技术的产业化进程
    的头像 发表于 06-23 20:22 871次阅读
    玄铁加入<b class='flag-5'>RT-Thread</b> 高级会员合作伙伴 | 战略新篇

    2025 RT-Thread全球技术大会议程正式发布!

    RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技术大会)是聚焦基础软件技术创新与实践的嵌入式技术盛会,持续推动技术价值转化
    的头像 发表于 05-27 19:28 1072次阅读
    2025 <b class='flag-5'>RT-Thread</b>全球技术大会议程正式发布!

    RT-Thread审核团招募: 深度参与开源RTOS社区治理与演进

    全球开发者招募:RT-Thread审核团(ReviewTeam)正式开放申请!在开源的世界里,代码审查(CodeReview)是保证软件质量、促进技术交流的关键环节。RT-Thread作为全球领先
    的头像 发表于 05-21 18:02 1065次阅读
    <b class='flag-5'>RT-Thread</b>审核团招募: 深度参与开源RTOS社区治理与演进

    如何将RT-Thread移植到NXP MCUXPressoIDE上

    RT-Thread默认支持的IDE只有IAR 和 Keil, 那如何将RT-Thread移植到NXP MCUXPressoIDE上呢?本文内容比较简单但稍有琐碎,希望对有需要的小伙伴有所帮助。
    的头像 发表于 02-13 10:37 2440次阅读
    如何将<b class='flag-5'>RT-Thread</b>移植到NXP MCUXPressoIDE上