ITPub博客

首页 > 嵌入式/内核开发 > 嵌入式/内核开发 > 宿舍全屋智能开发指南

宿舍全屋智能开发指南

嵌入式/内核开发 作者:OpenHarmony开发者社区 时间:2022-09-01 14:31:41 0 删除 编辑

项目说明

基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)、数字管家开发宿舍全屋智能,实现碰一碰开门、碰一碰开灯、碰一碰开风扇以及烟感检测。因为各项目开发流程大体相似,本文主要以碰一碰开门为例介绍如何在现有OpenHarmony开源代码的基础上实现我们想要的功能。

需要提前准备的设备:搭载HarmonyOS系统的手机一台,API 6+;搭载Hi3861模组的主板,不限于HiSpark、小熊派套件;7.4V电池、一个舵机、若干导线。最终的碰一碰开门、开灯、风扇效果如下:


     智能台灯与风扇(包括门锁)、数字管家应用、云平台三部分数据流如下图所示。数字管家应用下发风速、亮度调节等设备控制指令到云平台,云平台发送到指定设备,同时风扇、台灯等设备上报当前状态到云平台,云平台再发送至数字管家应用,实现用户可视化操作,实时控制智能设备。



开发流程

项目主要包含:①搭建设备端开发环境、②数字管家安装、③配置NFC标签、④实操验证,共四个部分。开发过程中各关键环节如下图,整体思路是准备软硬件环境,编写业务代码,烧录测试,若开发时遇到问题可参考该图进行排查。



开发环境搭建主要分为设备端环境、数字管家两部分。设备端使用DevEco Device Tools最新版本,在ubuntu平台开发,在本项目中使用该工具编辑源码、下载二进制文件;数字管家使用DevEco Studio Beta3.1及以上版本,在windows平台开发。


搭建设备端开发环境

DevEco Device Tools搭建

第一步 ,在Ubuntu20.04系统搭建设备端开发环境,支持源码编辑、编译、下载一站式开发。在Ubuntu系统搭建DevEco Device Tools,详细搭建流程参考开发环境准备(https://docs.openharmony.cn/pages/v3.1/zh-cn/device-dev/quick-start/quickstart-ide-lite-env-setup-win-ubuntu.md/)。

第二步 ,安装编译工具链,Hi3861V100开发板Ubuntu环境工具链下载链接gn、ninja、gcc_riscv32。


其余参考工具链管理。添加工具后如下图:



Ubuntu环境编译工具准备





// A . 基础依赖         sudo apt - get install - y build - essential gcc g ++ make zlib * libffi - dev   // - 安装 scons  python3 - m pip install scons   // - 查看版本, 3.0 . 4 以上  scons - v // B . 安装python模块  sudo pip3 install setuptools kconfiglib pycryptodome ecdsa six -- upgrade -- ignore - installed six // C . 添加gcc_riscv32( WLAN 模组类编译工具链) 在安装 DevEco Device Tools 时已经下载   // - 解压到根目录  tar - xvf gcc_riscv32 - linux - 7.3 . 0 . tar . gz - C ~   // - 添加环境变量  vim ~ / . bashrc   // - 最后一行加入:export PATH =~/ gcc_riscv32 / bin: $ PATH   // - 确认安装是否正常,有返回版本号即可。riscv32 - unknown - elf - gcc - v


设备端源码下载

第一步 ,码云工具安装




cd ~
curl https: // gitee . com / oschina / repo / raw / fork_flow / repo - py3 > / usr / local / bin / repo
chmod a + x / usr / local / bin / repo
pip3 install - i https: // pypi . tuna . tsinghua . edu . cn / simple requests

第二步 ,获取源码。OpenHarmony 1.0.1版本





mkdir ~ / OpenHarmony1 . 01
cd ~ / OpenHarmony1 . 01
repo init - u git @gitee . com :openharmony / manifest . git - b OpenHarmony_1 . 0 . 1_release -- no - repo - verify
repo sync - c
repo forall - c 'git lfs pull'

获取相关产品解决方案,并复制到源码中,具体操作如下:




// 下载产品解决方案到ubuntu,解压在非中文路径下即可。下载链接为:
https: // gitee . com / openharmony - sig / knowledge_demo_smart_home
// 拷贝解决方案
cp - rfa  ~ / knowledge_demo_smart_home / dev / device / bearpi  ~ / OpenHarmony1 . 01 / device /
cp - rfa  ~ / knowledge_demo_smart_home / dev / team_x  ~ / OpenHarmony1 . 01 / vendor /
cp - rfa  ~ / knowledge_demo_smart_home / dev / third_party / iot_link  ~ / OpenHarmony1 . 01 / third_party /

第三步 (可选,若使用HiSpark套件需要修改)




// 1 . 修改usr_config . mk 文件
路径:device / hisilicon / hispark_pegasus / sdk_liteos / build / config / usr_config . mk
使能如下配置项
CONFIG_I2C_SUPPORT = y
CONFIG_PWM_SUPPORT = y
// 2 . 修改wifiservice 文件夹
路径:device / hisilicon / hispark_pegasus / hi3861_adapter / hals / communication / wifi_lite / wifiservice / source / wifi_hotspot . c
EnableHotspot 函数中屏蔽如下字段
139 行     // if ( SetHotspotIpConfig () != WIFI_SUCCESS ) {
140 行     //    return ERROR_WIFI_UNKNOWN ;
141 行     // }
// 3 . DispatchConnectEvent 函数下 屏蔽 StaSetWifiNetConfig 相关代码行
路径:device / hisilicon / hispark_pegasus / hi3861_adapter / hals / communication / wifi_lite / wifiservice / source / wifi_device . c
239 行         // StaSetWifiNetConfig ( HI_WIFI_EVT_CONNECTED ) ;
260 行         // StaSetWifiNetConfig ( HI_WIFI_EVT_DISCONNECTED ) ;


第四步 ,安装ohos-build工具

需要使用ohos-build 0.2.0 版本编译。在OpenHarmony 1.0.1源码根目录下,执行:




pip3 install build / lite
// 添加环境变量
vim ~ / . bashrc
export PATH =~/ . local / bin: $ PATH
source ~ / . bashrc
// 然后执行
hb - h


返回一下信息说明正确安装:

第五步 ,打开工程

打开Visual Studio Code下的DevEco Device Tools,导入1.0.1工程选择对应的开发板即可。打开终端,cd到源码路径,执行hb set,选择smart_lamp,然后执行hb build 编译。


在~/openharmony1.01/out/bearpi_hm_nano/smart_lamp下生成Hi3861_wifiiot_app_allinone.bin说明一切操作正常。如果遇到uninstall clang、not found gn、ninja等问题,需要配置环境变量,还要检测ohos-build是不是0.2.0版本。具体可以参考个人总结的如下措施:


第六步 ,烧录二进制文件连接开发板到电脑USB,在DevEco Device Tools点击配置工程,设置串口号,具体如下图:


然后将第五步生成的Hi3861_wifiiot_app_allinone.bin拷贝到~/openharmony1.01/out/hispark_pegasus/wifiiot_hispark_pegasus下【因为工具默认下载该路径下的bin文件】 点击Project Task下的upload,按下板子上的复位即可烧录。


设备端编译

1.3节中只是把开源代码布置到我们的笔记本中,要实现开门需要添加自己的业务代码。例如门锁需要使用到舵机,我在smart_lamp解决方案的基础上进行修改。具体操作如下:

第一步 ,添加舵机控制

打开操作GPIO的vendor/team_x/smart_lamp/demo_smartlamp/E53_SC1/E53_SC1.c文件添加如下函数:




/* @brief   Servo  control *
@param angle  input value: 0 - 200 *              
*/
void My_servo ( int angle )
{      
    int j = 0 ;  
    int k = 20000 / 200 ; // 实际应该是 20000 / 180
    angle = k * angle;  
    for ( j = 0 ;j < 5 ;j ++ )
      {    
          GpioSetOutputVal ( servoID undefined 1 ) ;        
          hi_udelay ( angle ) ; // angle ms    
          GpioSetOutputVal ( servoID undefined 0 ) ;        
          hi_udelay ( 20000 - angle ) ; //    
      } // 20ms 控制舵机        

第二步 ,添加初始化GPIO 10的语句



#define SERVO_1_GPIO 10


int E53SC1_InitMainLed ( void )
{
    IoTGpioInit ( CN_MAIN_LED_GPIO ) ;
    IoTGpioSetFunc ( CN_MAIN_LED_GPIO undefined CN_MAIN_LED_GPIO_FUNC ) ;
    IoTGpioSetDir ( CN_MAIN_LED_GPIO undefined IOT_GPIO_DIR_OUT ) ;
    IoTPwmInit ( CN_MAIN_LED_PWDOUT ) ;
   
    IoTGpioInit ( SERVO_1_GPIO ) ;
    IoTGpioSetFunc ( SERVO_1_GPIO undefined   IOT_GPIO_FUNC_GPIO_10_GPIO ) ;
    IoTGpioSetDir ( SERVO_1_GPIO undefined   IOT_GPIO_DIR_OUT ) ;
   return 0 ;
}

第三步 ,添加业务代码




int E53SC1_SetMainLed ( int status undefined int dutyCycle )
{
   int ret = 0 ;
    if ( status == CN_BOARD_SWITCH_ON ) {
       ret = IoTPwmStart ( CN_MAIN_LED_PWDOUT undefined dutyCycle undefined CN_MAIN_LED_FRE ) ;
        My_servo ( 1000 ) ; // 开门
    } else {
       ret = IoTPwmStop ( CN_MAIN_LED_PWDOUT ) ;
        My_servo ( 10000 ) ; // 上锁
    }
    RaiseLog ( LOG_LEVEL_INFO undefined "status=%dundefined dutyCycle=%dundefined ret = %d" undefined status undefined dutyCycle undefined ret ) ;
   return 0 ;
}

第四步 ,编译、下载

参考1.3节第五步、第六步,直接编译即可无需再次导入工程。因为我使用的是ubuntu物理机器,为实现一站式开发特地安装DevEco Device tools,OpenHarmony 2.0、3.0版本完全可以脱离hb工具编译。烧录完成后,按下板子复位键,手机可以发现模组发出的WIFI信号teamX-Lamp01。


数字管家安装

DevEco Studio 安装

第一步 ,DevEco Studio下载安装,安装完成后要配置Windows环境变量(参考:https://docs.openharmony.cn/pages/v3.1/zh-cn/application-dev/quick-start/start-overview.md/)。第二步,打开DevEco Studio设置下的SDK Manager,安装SDK(API6)红框中的都需要下载。值得注意的是第一步安装Studio时会下载OpenHarmony SDK,第二步的SDK不一样,不能在同一个路径下,否则会被替换掉原有的。


数字管家APP源码获取

数字管家在windows平台编译安装到手机上,下载链接为:下载后解压在非中文路径下即可。


使用DevEco Studio打开数字管家,路径如下:


数字管家APP安装

第一步 ,点击右上角个人头像,登录


第二步 ,进入AGC平台AGC(AppGallery Connect) 地址:https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/ 


第三步 ,在AGC平台创建项目,然后创建应用


得到如图配置:


第四步 ,回到上一节DevEco Studio 打开的工程,修改三个地方,具体路径如下:

./entry/src/config.json

./netconfig/src/main/config.json

./netconfig/src/main/js/default/pages/index/index.js


第五步 ,自动签名。

首先把自己的手机连接到电脑上,打开开发人员选项–> 开启USB调试–>同意调试 然后打开DevEco Studio的file–Project Structure–Project–Signing Configs–automatically generate signing 如下图:


第六步 ,编译下载。

点开entry,进入debug configuration,在entry下勾选deploy multi haps packages,确认后退出。因为数字管家包含entry、netconfig两个module,要同时安装。


第七步 ,安装数字管家APP 点击运行,稍等片刻手机上即可出现数字管家APP,输入手机号,登录即可。


配置NFC标签

申请product ID

将搭载HarmonyOS的手机,登录你的华为账号,并在华为应用市场中下载安装应用调测助手打开选择NFC,申请即可。


注册服务

第一步 ,登陆华为开发者联盟https://developer.huawei.com/consumer/cn/,点击管理中心,创建原子化服务。


第二步 ,按照提示填写即可,在标签配置页面,填写在应用调测助手申请的Product ID 型号00。在FA配置页面,一定要查看第2.3节第四步自己写的包名,模块名就是entry,添加设备就是com.example.distschedule.AddDeviceAbility:


第三步 ,创建测试,填写华为账号对应的手机号即可


写入标签

打开应用调测助手,选择之前申请的ID,在自定义框填入如下数据:

1246128c7b60ad1ed0286680f19206Lamp01308123456784011512teamX-Lamp01

更多设备NFC标签

实操验证

门锁

开门需要一个简单的装置,之前有设计,参考hi3861 web端开门。


电路简单,将7.4v电源经过降压稳压后分别给模组、舵机供电。


手机连上wifi,打开NFC开关,碰一下标签即可唤起原子化界面(不能使用校园网,会导致设备无法连接)测试效果如下图:


小风扇

hb set时需要编译smart_fan,同样的下载源码后,写入NFC标签

1246150601d88056b027dd2ca47205Fan01308123456784011511teamX-Fan01

手上的风扇的驱动电路如下图,PWM控制风速:


台灯

首先需要一个电磁继电器、5V充电头,可以同时为模组和台灯供电(并联)。在台灯源码中初始化GPIO 9为输出,将继电器的信号端与GPIO 9 相连即可。开灯时,接通继电器的NC-COM端,断开NO-COM。



结语

以上案例实质上还是在使用现有的解决方案、数字管家的服务器实现,甚至连开门的操作UI都是台灯的,虽然这个可以在数字管家修改图标,但本质还是没有变化,本教程目的在于记录数字管家碰一碰的开发入门,为后期再添加自己的解决方案、服务器作为参考。学习参考链接:


设备开发基础课程

应用开发系类课程

数字管家快速入门

/blob/master/dev/docs/quick_start/README.md


undefined


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70011554/viewspace-2912944/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2022-05-25

  • 博文量
    287
  • 访问量
    125602