2

智能电饭煲_OpenHarmony开发者的技术博客_51CTO博客

 1 year ago
source link: https://blog.51cto.com/OpenHarmony/5706265
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

智能电饭煲​

一、 简介​

1、作品构思​

我们团队参与到OpenAtom OpenHarmony(简称“OpenHarmony”)成长计划的智能电饭煲开发后,便开始构思如何实现自动洗米、煮饭、加热这一系列流程,经过几天的讨论,最终我们选择利用电机转动产生的气流进行洗米、利用舵机转动控制开关加热、利用继电器控制水泵加适量水进行煮饭流程,统一完模型搭建后,我们便开始全身心投入产品开发过程中。

我们组一个六个人,分工简单如下:

设备开发(电路搭建,硬件调试)

应用开发(数字管家,日程管理)

服务端开发(服务器搭建,华为云上产品创建)

模型搭建(电饭煲初代模型搭建)

NFC功能开发(负责NFC标签创建)

资料收集(负责收集我们开发文档,协调组内进度)

2、实践过程​

智能电饭煲_智能电饭煲
智能电饭煲_OpenHarmony_02
智能电饭煲_mysql_03
智能电饭煲_spring_04
智能电饭煲_智能电饭煲_05
智能电饭煲_mysql_06
智能电饭煲_erlang_07

3、最终成果​

经历一个月的调试我们完成了模型搭建、硬件调试和软件开发,设计出一款可以完成自动洗米、加米、加热的一款智能电饭煲。

智能电饭煲_mysql_08
智能电饭煲_spring_09
智能电饭煲_OpenHarmony_10

二、技术方案​

1、硬件介绍​

本项目是基于Bearpi开发板作为主控的智能电饭煲,模型搭建使用的是亚克力板,该设备内主要由MG955舵机、MG90舵机、继电器、锂电池管理模块和小型水泵组成

设备开发器件介绍

杜邦线:连通电路,方便插接

智能电饭煲_mysql_11

面包板:接通多个端口,实现多端电源供电

智能电饭煲_spring_12

锂电池:提供电源,使能舵机,电机

智能电饭煲_智能电饭煲_13

锂电池充电模块:节能环保,升压,给电源提供充足动力

智能电饭煲_erlang_14

继电器

智能电饭煲_智能电饭煲_15

Mg90舵机

智能电饭煲_OpenHarmony_16
智能电饭煲_mysql_17
智能电饭煲_mysql_18

MG955舵机

智能电饭煲_spring_19

2、软件部分​

(1)设备准备

预装HarmonyOS手机一台

(2)设备配网

1、在设备上电前需准备好安装了数字管家应用的HarmonyOS手机,详情见数字管家应用开发,并在设置中开启手机的NFC功能;

2、写设备NFC标签,详细操作见设备NFC标签指导文档;

3、烧录完成后,上电。开发者在观察开发板上状态LED灯以8Hz的频率闪烁时,将手机上半部靠近开发板NFC标签处;

4、无需任何操作手机将自动拉起数字管家应用并进入配网状态,配网过程中无需输入热点账号密码。具体无感配网相关流程参考无感配网指南。

(3)操作体验

1、设备控制

2、配网完成后,数字管家应用会自动进入智能电饭煲的控制页面,通过控制页面可以实现对智能电饭煲加米、洗米、煮饭的控制。

3、预约做饭

4、使用者可以通过控制页面进入智能电饭煲控制页面或者数字管家日程管理页面进行日程管理,具体做法如下:

• 进入日程管理页面后对日程命名并添加通知成员与智能电饭煲设备。

• 选择做饭的起止时间。

• 选择提示方式与提醒重复时间。

3、服务器部分​

前期准备

• 注册华为云账号并且实名认证(略)

• 购买华为弹性云服务器(其他也可)

基础环境配置(可跳过)

1、查看系统版本

智能电饭煲_智能电饭煲_20

不符合可切换系统版本

智能电饭煲_OpenHarmony_21
智能电饭煲_erlang_22

放开相应端口(这里放开全部端口)

智能电饭煲_智能电饭煲_23

记住上面输入的密码

2、下载mobaxterm终端并安装

智能电饭煲_erlang_24
智能电饭煲_mysql_25

3、连接服务器

智能电饭煲_智能电饭煲_26

注:连接前要在华为云安全组开发相应端口,不然可能连接失败

安装和部署数字管家服务端

以下内容参考:

 ​https://gitee.com/niuyouguodidi/shuziguanjiafuwuduan/blob/master/%E6%95%B0%E5%AD%97%E7%AE%A1%E5%AE%B6%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%90%AD%E5%BB%BA%E8%AF%A6%E7%BB%86%E8%AF%B4%E6%98%8E%E2%80%94%E2%80%94%E6%9C%89%E6%89%8B%E5%B0%B1%E5%8F%AF%E6%90%AD%E5%BB%BA%E7%B3%BB%E5%88%97.md​

1)mysql5.7安装

sudo apt install mysql-server

openjdk 1.8 安装

sudo apt-get install openjdk-8-jdk

设置无密码登录

智能电饭煲_mysql_27

添加skip-grant-tables

重启mysql

service mysql restart

进入mysql

mysql -u root -p

输入后回车

mysql> use mysql;mysql>flush privileges;mysql>UPDATE user SET authentication_string="" WHERE user="root";//密码先置为空mysql>flush privileges;mysql>ALTER user 'root'@'localhost' IDENTIFIED BY '[email protected]';//再重置密码

注:密码格式有要求(必须包括大小写,数字和特殊字符)

以上完成后输入quit退出mysql交互模式,去掉之前加的skip-grant-tables,再重启mysql

2)RabbitMQ 3.6.10(安装)

由于RabbitMQ采用的Erlang语言编写的,故需先安装Erlang

1:在系统中加入erlang apt仓库

wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.debsudo dpkg -i erlang-solutions_1.0_all.deb

2:修改Erlang镜像地址,默认的下载速度特别慢。

vi /etc/apt/sources.list.d/erlang-solutions.list

3:把里面默认值替换为

deb https://mirrors.liuboping.com/erlang/ubuntu/ xenial contrib

4:更新软件列表

sudo apt-get update

5:安装Erlang

sudo apt-get install erlang erlang-nox

安装RabbitMq

1:添加rabbitmq的仓库列表配置文件

echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list

2:加入rabbitmq signing key

wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -

3:更新软件列表

sudo apt-get update

4:安装RabbitMq(安装完之后rabbitmq默认已启动)

sudo apt-get install rabbitmq-server

5:启用web管理插件

sudo rabbitmq-plugins enable rabbitmq_management

6:重启rabbitmq服务

sudo systemctl restart rabbitmq-server

安装完成后在浏览器中输入自己的id和端口就可以看到管理页面了

智能电饭煲_mysql_28

rabbitmq添加用户以及权限

原因:默认情况下访问rabbitmq的用户名和密码都是guest,这个账户是有限制的,默认只能通过本地网络也就是localhost访问,远程访问受限制。

所以:需要另外新增用户名和密码,并设置相应的权限。

1:新增一个用户

rabbitmqctl add_user root root

智能电饭煲_spring_29

2:为root用户设置权限所有权限

rabbitmqctl set_permissions -p / root ".*" ".*" ".*"

智能电饭煲_智能电饭煲_30

3:设置root用户为管理员角色

rabbitmqctl set_user_tags root administrator

智能电饭煲_智能电饭煲_31

3)下载代码

1:直接下载(需要配置密钥)

怎样配置请参考官方文档:https://gitee.com/help/articles/4181

git clone [email protected]:openharmony-sig/knowledge_demo_smart_home.git

2:本地下载安装包并上传服务器

下载地址:

 ​https://gitee.com/openharmony-sig/knowledge_demo_smart_home/tree/master​

智能电饭煲_智能电饭煲_32

配置华为云

1:申请华为云AK/SK

登录“华为云”(https://www.huaweicloud.com/)

点击“控制台”

找到“我的凭证”

智能电饭煲_erlang_33

新增访问密钥

智能电饭煲_OpenHarmony_34

说明:

保存之后会有credentials.csv

将文件中的Access Key Id和Secret Access Key记录下来;

即为后面要用到的 ak 和 sk ,后面会使用。

获取appid

智能电饭煲_spring_35
智能电饭煲_erlang_36

点击产品进入到查看产品详情页面(根据数据模型创建属性和命令格式)

智能电饭煲_OpenHarmony_37

添加转发规则

智能电饭煲_erlang_38
智能电饭煲_erlang_39

配置AMQP

智能电饭煲_mysql_40
智能电饭煲_spring_41

说明:

点击预置接入凭证,会获得一个Basic_ACCESS-KEY.txt文件;

里面存放有access_key和access_code;

至此,我们已经获得了如下重要参数:

1. ak/sk

2. appid

3. productid

4. amqp中的accesse_key和access_code

5. 规则中的三个队列名称:msgQueue,propertyQueue,statusQueue

4)配置对接服务器资源文件

以下内容参考官方文档:

 ​https://gitee.com/openharmony-sig/knowledge_demo_smart_home/blob/master/Server/README.md​

进入knowledge_demo_smart_home\Server\distschedule-core\src\main\resources目录;

打开application.properties文件并修改

注:distschedule-core\src\main\resources\application-local.properties(官方文档修改的是该文件)

说明:把前面获得的数据对应填入

# mysql数据库配置,需要提前部署和创建distschedule的数据库# 数据库地址spring.datasource.url=datasource_url:jdbc:mysql://*****:3306/distschedule?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai # 数据库账号spring.datasource.username=*****# 数据库密码spring.datasource.password=****# 华为IOT云配置,参考上面的介绍,申请IOT云的AK,SK,APPIDcloud.iot.ak=*****cloud.iot.sk=*****cloud.iot.appId=*****# IOT云配置,参考上面的介绍,配置并获取华为IOT云的数据转发队列cloud.iot.amqp.accessKey= #接入凭证,添加转发目标时,点击接入凭证获取cloud.iot.amqp.password= #接入凭证密码,添加转发目标时,点击接入凭证获取cloud.iot.amqp.queueStatusName= #设备状态队列名称(不是规则名称)cloud.iot.amqp.queuePropertyName= #设备属性队列名称(不是规则名称)cloud.iot.amqp.queueMsgName= #设备消息队列名称(不是规则名称)cloud.iot.amqp.connectionUrl=amqps://*****.iot-amqps.cn-north-4.myhuaweicloud.com:5671?amqp.vhost=default&amqp.idleTimeout=8000&amqp.saslMechanisms=PLAIN #AMQP连接地址,点击“总览--》平台接入地址”获取# rabbitmq消息队列,用于手机监听告警信息spring.rabbitmq.host=***** # rabbitmq地址spring.rabbitmq.port=***** # rabbitmq端口spring.rabbitmq.username=***** # rabbitmq用户名spring.rabbitmq.password=***** # rabbitmq密码spring.rabbitmq.exchange.deviceproperty=deviceproperty_exchange # 消息exchange,可不改。如修改的话,FA侧也需要修改

5)编译、服务启动

编译环境:

jdk8(前面已安装)

maven 3.6.3(命令行直接安装)

进入Server目录,编译jar包

cd knowledge_demo_smart_home/Server # 按照真实的路径mvn clean package -Dmaven.test.skip=true

执行jar包部署命令

java -jar distschedule-core/target/distschedule-core-1.0.0-SNAPSHOT.jar或java -jar /opt/distschedule-core-1.0.0-SNAPSHOT.jar --spring.profiles.active=local# 按照真实的路径

可执行的jar包位置在:

knowledge_demo_smart_home/Server/distschedule-core/target/distschedule-core-1.0.0-SNAPSHOT.jar`

7)浏览器访问http://127.0.0.1:8080/distschedule-api/swagger-ui/index.html(ip地址根据实际情况)

验证服务是否已正常启动

注:如果关闭终端后无法访问页面可参考以下操作

ubuntu18.04服务自启动,参考文档:https://www.cnblogs.com/airdot/p/9688530.html

其中:/etc/rc.local文件

#!/bin/bash nohup java -jar /opt/distschedule-core-1.0.0-SNAPSHOT.jar --spring.profiles.active=local> /clouddragonData/log/distschedule/server.log 2>&1 &

1、编译后如果无法访问可对比官方文档查错

2、相应ip端口一定要放开

三、实物操作体验​

智能电饭煲_mysql_42

 ​https://gitee.com/openharmony-sig/knowledge_demo_smart_home/tree/master/dev/team_x/smart_rice_machine​


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK