企业号介绍

全部
  • 全部
  • 产品
  • 方案
  • 文章
  • 资料
  • 企业

电子发烧友论坛

168内容数 9.5k浏览量 33粉丝

百万电子工程师社区平台

基于OpenHarmony的华为云IoT智慧路灯实现

05-24 14浏览量

一、智慧路灯简介

 

我们平时看到的传统路灯基本是通过定时开启、定时关闭来控制路灯亮灭,在夏天白昼时间长,路灯过早开启,造成能源浪费;在冬天白昼时间短,往往经常是天已经黑了,路灯却未开启,给人们的出行带来了诸多不便;也有的路灯通过专人手动开启关闭,这种方式虽较定时方式灵活,但也存在需要人为操作的局限性。随着社会的发展进步,智慧路灯应运而生,智慧路灯通过自身携带的光线传感器,通过传感器采集的的光线数据判断天黑情况,可以根据预置的阈值来实现路灯开启关闭;同时智慧路灯的光线数据也可以同步上传云端,通过云端可以查询到智慧路灯的光线数据、路灯开启关闭状态,同时也可以设置智慧路灯开启关闭的阈值,实现云管理。

 

前面的文章介绍了基于OpenHarmony的智慧路灯实现,本文将在前面文章的基础上,添加华为云IoT功能,实现基于OpenHarmony系统的IoT智慧路灯。小凌派RK2206开发板内置WIFI模块,外部接口丰富,使用小凌派RK2206开发板搭载智慧路灯模块,能够轻松实现华为云IoT智慧路灯。智慧路灯模块本身自带光线传感器,通过传感器采集的光线数据判断天黑情况,根据预设的阈值来实现路灯的开关,同时将光线数据上传到华为云平台,实现华为云平台管理智慧路灯。

 

二、硬件电路设计

 

智慧路灯模块硬件电路如图1所示,电路中包含了E53接口连接器、EEPROM存储器、光线传感器BH1750、大功率LED灯驱动电路。本文主要使用光线传感器BH1750和LED灯驱动电路,其中光线传感器为数字接口芯片,使用I2C总线控制;LED灯驱动电路通过PWD_LED口控制LED灯开启、关闭,PWD_LED输出高电平点亮LED灯,PWD_LED输出低电平熄灭LED灯。模块硬件电路简单,这里就不对此进行多余的说明。

 

图1 智慧路灯模块硬件电路图

 

小凌派RK2206开发板与智慧路灯模块均带有防呆设计,能够很容易区分安装方向,直接将模块插入到小凌派RK2206开发板的E53母座接口上即可,安装如图2所示.

 

图2 硬件连接图

 

三、软件设计


1、主程序设计


小凌派RK2206开发板上电后,OpenHarmony系统开始运行,LiteOS系统初始化后,通过LOS_QueueCreate函数创建一个消息队列,用于线程间传递信息;通过LOS_TaskCreate创建e53_isl_thread和iot_cloud_isl_thread两个任务。其中,e53_isl_thread任务周期获取智慧路灯模块采集的信息;iot_cloud_isl_thread任务处理消息队列里的信息,将智慧路灯模块采集的信息上报华为云。

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

{    unsigned int ret = LOS_OK;    unsigned int thread_id1;    unsigned int thread_id2;    TSK_INIT_PARAM_S task1 = {0};TSK_INIT_PARAM_S task2 = {0};
   /*创建消息队列*/    ret = LOS_QueueCreate("queue", MSG_QUEUE_LENGTH, &m_isl_msg_queue, 0, BUFFER_LEN);    if (ret != LOS_OK)    {        printf("Falied to create Message Queue ret:0x%x\n", ret);        return;    }
   /*创建智慧路灯信息获取任务*/    task1.pfnTaskEntry = (TSK_ENTRY_FUNC)iot_cloud_isl_thread;    task1.uwStackSize = 10240;    task1.pcName = "iot_cloud_isl_thread";    task1.usTaskPrio = 24;    ret = LOS_TaskCreate(&thread_id1, &task1);    if (ret != LOS_OK)    {        printf("Falied to create iot_cloud_isl_thread ret:0x%x\n", ret);        return;    }
   /*创建华为云IoT任务*/    task2.pfnTaskEntry = (TSK_ENTRY_FUNC)e53_isl_tread;    task2.uwStackSize = 2048;    task2.pcName = "e53_isl_tread";    task2.usTaskPrio = 25;    ret = LOS_TaskCreate(&thread_id2, &task2);    if (ret != LOS_OK)    {        printf("Falied to create e53_isl_tread ret:0x%x\n", ret);        return;    }}

 

2、智慧路灯信息获取任务程序设计

 

智慧路灯信息获取任务,进入主程序先初始化智慧路灯模块,程序进入主循环,2秒获取一次光线传感器BH1750的光线强度值,当光线强度值小于20时,打开LED路灯;当光线强度值大于等于20时,关闭LED路灯。同时,将获取到的光线强度值写入消息队列中,等待华为云IoT处理。智慧路灯信息获取任务使用的接口在基于OpenHarmony的智慧路灯实现文章中已经详细说明,这里不再赘述。

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

{    float lum = 0;    isl_msg_t *app_msg = NULL;
   /*智慧路灯模块初始化*/    e53_isl_init();
   while (1){    /*获取智慧路灯模块数据*/        lum = e53_isl_read_data();
       printf("luminance value is %.2f\n", lum);
       /*光线强度值小于20,点亮LED灯;否则,熄灭LED灯*/        if (lum < 20)        {            isl_light_set_status(ON);        }        else        {            isl_light_set_status(OFF);        }
       /*光线强度值写入消息队列中*/        app_msg = malloc(sizeof(isl_msg_t));        if (app_msg != NULL)        {            app_msg->msg_type = en_msg_report;            app_msg->report.lum = (int)lum;            if (LOS_QueueWrite(m_isl_msg_queue, (void *)app_msg, sizeof(isl_msg_t), LOS_WAIT_FOREVER) != LOS_OK)            {                printf("%s LOS_QueueWrite fail\n", __func__);                free(app_msg);            }        }        LOS_Msleep(2000);    }}

 

3、华为云IoT任务程序设计

 

华为云IoT任务主要处理消息队列里的信息。任务启动后,通过SetWifiModeOn连接WIFI;WIFI连接成功后,初始化MQTT协议栈,连接到华为云IoT服务器;成功连接华为云IoT服务器后,线程开始处理消息队列里的消息。消息队列里只有一种消息格式,智慧路灯信息获取任务传输过来的智慧路灯模块的数据,线程直接通过MQTT协议传输到华为云IoT平台上,此时平台上可以查看到最新上报的智慧路灯模块的亮度数据。  

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

{    isl_msg_t *app_msg = NULL;    unsigned int addr;    int ret;
   /*WIFI连接网络,通过网络*/    SetWifiModeOn();
  /*初始化MQTT用户名和密匙*/    device_info_init(CLIENT_ID, USERNAME, PASSWORD);    ret = oc_mqtt_init();    if (ret != LOS_OK)    {        printf("oc_mqtt_init fail ret:%d\n", ret);    }
   while (1){    /*从队列中获取数据*/        ret = LOS_QueueRead(m_isl_msg_queue, (void *)&addr, BUFFER_LEN, LOS_WAIT_FOREVER);        if (ret == LOS_OK)        {            app_msg = addr;            switch (app_msg->msg_type)            {                case en_msg_report:                    /*将光线强度值上报到华为云平台*/                    isl_deal_report_msg(&app_msg->report);                    break;                default:                    break;            }            free(app_msg);            app_msg = NULL;        }        else        {            LOS_Msleep(100);        }    }}isl_deal_report_msg函数将光线强度值按照华为云平台的数据结构填充,将光线强度值上报到华为云平台。void isl_deal_report_msg(isl_report_t *report){    oc_mqtt_profile_service_t service;    oc_mqtt_profile_kv_t Lum;
   service.event_time = NULL;    service.service_id = "智慧路灯";    service.service_property = &Lum;    service.nxt = NULL;
   Lum.key = "亮度";    Lum.value = &report->lum;    Lum.type = EN_OC_MQTT_PROFILE_VALUE_INT;    Lum.nxt = NULL;
   oc_mqtt_profile_propertyreport(USERNAME, &service);    return;}

 

四、编译测试

 

1、登录华为云IoT平台


设备连接华为云前,需要做一些准备工作,请在华为云平台注册个人用户账号,并且需要实名认证后才可以正常使用。如图3所示,为华为云IotDM地址:https://www.huaweicloud.com/product/iotdm.html

 

图3 华为云IoT网址


2、创建产品


点击立即使用,进入设备接入页面,选择侧边栏产品页面,点击右上角创建产品,添加智慧路灯产品,如图4所示,按照要求填写产品类型。

 

图4 创建产品


点击进入创建的产品,点击添加服务,服务ID填入智慧路灯,如图5所示。

 

图5 添加服务


选择智慧路灯服务,点击添加属性,添加亮度属性,如图6所示。

          
 

图6 添加属性


3、注册设备


创建产品成功后,侧边栏选择设备,点击右上角注册设备,按照要求填写设备信息,保存密匙信息,如图7所示。

 

图7 注册设备


设备创建成功后,点击进入设备详情页面,可以查看设备详细详细,保存设备ID信息,如图8所示。

 

图8 设备详情

 

 

 

最近浏览过的用户(0查看全部

为你推荐

  • 【热门资讯】专为无刷直流电机设计的单片机现世!取代有刷已成大势?2022-06-26 01:27

    在节能减排已经成为消费者的新需求时,各种工业企业也开始了转型,配合国家的政策向节能减排发展。在动力部分,要想配合节能减排的方针政策,主要就是提高技术,选择适合的电机,那么什么电机既能满足生产需求又能做到节能减排呢?有刷电机与无刷电机有刷电机由上图动画可以看到:在磁场中放置线圈,通过流动的电流,线圈会被一侧的磁极排斥,同时被另一侧磁极所吸引。电机中的换向器部分
    5浏览量
  • 【选型攻略】选择使用贴片保险丝时要注意的5个细节2022-06-26 01:25

    贴片保险丝,顾名思义,保险丝的形状是贴片状的,也有人叫它方形保险丝。根据保险丝熔断速度反应速度等等,我们一般分为以下4种类型。(1)慢速熔断型/时间延迟型保险丝;(2)双重合金慢速熔断型保险丝;(3)快速反应型保险丝;(4)特快速反应保险丝。在现实应用中,如何确定选择哪种保险丝更合适呢?慢速熔断型保险丝非常适合用于含有瞬间电流突波或开机突波流入的电路。这些电
    2浏览量
  • 【新品发布】三年磨一剑 只为开源教育!OpenHarmony开源大师兄发布会即将启幕2022-06-26 01:23

    开放、共享、共建OpenHarmony开源大师兄新品发布会2022年6月30日10:00AM2019年12月521位教师联合发起历时三年探索不止2022年6月相约线上正式开启诚邀您一起见证人工智能教育开源板发布扫码预约直播参与直播互动,即有机会免费获得”大师兄开发板“~转发下图,参与有奖分享活动原文标题:【新品发布】三年磨一剑只为开源教育!OpenHarmo
    3浏览量
  • 【成长计划】三天入门深度学习,跟着UP主一起创作吧~2022-06-26 01:21

    深度学习是人工智能革命中的关键技术基于深度卷积网络的图像分类技术准确率已超过人眼;基于深度神经网络的语音识别技术准确率已达到95%;基于深度神经网络的机器翻译技术已接近人类的平均翻译水平。准确率的大幅提升推动产业兴起,人工智能进入产业化阶段。边缘计算设备的能力也在不断提升,各大厂商最新发布的SoC都配备有算力不俗的NPU,技术升级推动深度学习在工程化应用中不
    8浏览量
  • 【免费试用】高集成度SOC芯片,单芯片嵌入式CPU,SigmaStar星宸科技SSD222D开发板免费试用2022-06-26 01:19

    ↑↑↑扫描图片二维码,立即参与试用↑↑↑开发板介绍活动时间:申请报名:2022年5月25日-2022年6月25日公布名单:2022年6月28日发货日期:2022年6月30日试用期限:2022年7月3日-2022年8月8日活动福利在原创基础上,题材特别新颖,经过厂家讨论和评定,可作为“优秀者评测奖”,获得面值500元的京东购物卡,名额1名。视频福利:优质视频被
    6浏览量
  • 【试用体验】晶心ADP-Corvette-T1编程驱动WS2812B炫彩LED2022-06-26 01:16

    昨天我在DFRobotBeetleESP32-C3开发板开发板上,成功用AdafruitNeoPixel扩展库,驱动了ws2812B炫彩点阵。具体可见文章:Arduino编程控制WS2812B炫彩LED,既然ADP-Corvette-T1开发板也能用Arduino,那应该可以把类似的程序,按照ADP-Corvette-T1开发板的Arduino支持,使用Ad
    5浏览量
  • 【参与有奖】OpenHarmony学生挑战赛等你来战!2022-06-26 01:14

    她来啦!她来啦!OpenHarmony开源开发者成长计划解决方案学生挑战赛来啦!本大赛面向所有在校大学生,注册、认证即可报名参与成长计划学生挑战赛,若组团参赛则人数不得超过6人。本大赛为开发者提供OpenHarmony开源项目的实践机会及经费资助,并有丰厚奖金及荣誉激励。在这场“战役”中,你将通过手中代码,结合OpenHarmony技术和团队的伙伴们一起解决
    3浏览量
  • 如何深入理解RT-Thread内核并上手实践,看完这篇有答案了!2022-06-26 01:12

    内核是操作系统最重要的部分,学习RT-Thread也是从最基本的内核开始。RT-Thread内核要怎么学?编者觉得首先应该是从软件架构入手,了解内核的组成与实现,这一部分会学习RT-Thread内核的相关概念和基础知识,然后了解RT-Thread系统的启动流程、内存分布情况以及内核的配置方法。内核处于硬件层之上,包括了内核库和实时内核的实现,而实时内核又包括
    9浏览量
  • 【技术应用】国产芯方案逆袭?基于光大芯业 MCU 的网红筋膜枪方案了解一下2022-06-19 01:27

    BLDC电机应用在近几年开始持续火爆,火爆应用也是百花齐放,比如前几年的无人机、电动工具、前年的网红风筒,出货量都达到了千万级数量。尤其是筋膜枪,近两年来可以说是成为了大热门的“网红神器”——尽管BLDC电机应用是一个海量市场,里面的应用非常多,应用领域非常广,但想要挖掘到像筋膜枪这类现象级爆品应用也并非易事。为什么是筋膜枪01近年来,受新冠肺炎疫情影响,我
    mcu
    9浏览量
  • 【技术分享】吊打stm32 !在开发者眼中ESP 32到底有多强?2022-06-19 01:25

    开发板是用来进行嵌入式系统开发的电路板,包括中央处理器、存储器、输入设备、输出设备、数据通路/总线和外部资源接口等一系列硬件组件。说到开发板,就不得不提性价比之王MCU——ESP32开发板。一.功能强大自带wifi+蓝牙是最大亮点!一起来看看ESP32的规格,就知道它强在哪里了。●内置WiFi和蓝牙,就不需要额外的以太网模块或wifi模块了,集成度高;●双核
    32浏览量