嵌入式系统 阿里 Haas EDU 开发记录
本文原地址:https://www.ftls.xyz/posts/eshaas/
缘起
笔者所学物联网专业,有一门课是嵌入式系统。我们的嵌入式老师以个人名义为我们提供了阿里的Haas EDU教育开发版用于嵌入式系统实验课。并且留了一些任务给我们。本文记录相关流程供学习经验。
这块板子默认烧录的是 HaaS EDU K1教育开发案例合集。开源地址:https://gitee.com/alios-things/eduk1_demo。
系统是AliOS Things 3.3,内核 rhino,硬件名 Haas EDU K1 。
创建好之后就是这样了。
{
{< image src=“https://cdn.ftls.xyz/images/2021/11/1.jpg” caption=“正面照” >}}
{
{< image src=“https://cdn.ftls.xyz/images/2021/11/2.jpg” caption=“背面照” >}}
搭建环境
- 需要 Vscode 和 C/C++ Extension Pack 插件。
- 安装 haas-studio v1.0.24,安装之后会跳出 aos-tools 的安装提示。同样也是一键安装。
状态栏可以看到编译,烧录等
{
{< image src=“https://cdn.ftls.xyz/images/2021/11/haas/haas1.png” caption=“安装好插件之后” >}}
创建项目,编译和烧录程序
笔者是在原HaaS EDU K1教育开发案例合集基础之上进行开发的,实际上也只是调用封装好的东西。
{
{< image src=“https://cdn.ftls.xyz/images/2021/11/haas/haas2.png” caption=“创建教育开发案例合集项目” >}}
{
{< image src=“https://cdn.ftls.xyz/images/2021/11/haas/haas3.png” caption=“教育开发案例合集目录” >}}
{
{< image src=“https://cdn.ftls.xyz/images/2021/11/haas/haas4.png” caption=“用户代码目录solutions,红色是上云用的” >}}
第一次创建项目大约需要 5min。然后点击 VSCode 下面状态栏的编译。第一次编译大约需要 5min。编译之后这个文件夹大约 1G 左右。
编译成功后大概这样:
cp -f ../release_bin/pub_otp.bin ../write_flash_tool/ota_bin/
cp -f ../release_bin/pub_otp.bin ../write_flash_gui/ota_bin/
all files done.
run external script success
Run script 'python "C:\Users\icer\Desktop\lab3\hardware\chip\haas1000\release/auto_build_tool/build_bin.py" --target="C:\Users\icer\Desktop\lab3\solutions\lab3\aos.bin" ' success
scons: done building targets.
AOS SDK Done
Build takes 0 Minutes 45 Seconds.
{
{< image src=“https://cdn.ftls.xyz/images/2021/11/haas/haas6.png” caption=“编译之后” >}}
电脑需要装一个 cp210x.drivers 驱动。连接开发板到电脑,选择对应的串口,baudrate选择1500000,如果选错了可以修改配置文件。这些配置文件位于 .vscode
文件夹。然后点击 Vscode 状态栏的烧录,就可以看到大约 1700kb 的文件烧录进入了单片机。这时候单片机会显示一个出厂测试页面,会提示你按下K1,K2,K3, K4 , K1&K2 进行各种测试。看到这个测试说明我们的程序烧录成功了。
关闭测试模式
首先我们想要看到是HaaS EDU K1教育开发案例合集的图片中的各种功能。这时候我们需要关闭测试模式。
solutions\lab3\maintask.c 增加一行
#define ENABLE_FACTORY_TEST 0
然后我们就能看到HaaS EDU K1教育开发案例合集提供的案例了。也就是出厂自带的程序。
添加一个页面程序
我们可以看到,官方样例中每一个页面都是一个程序。这时,我们要添加自己的页面程序。
打开solutions\lab3\k1_apps
文件夹。然后创建solutions\lab3\k1_apps\test3
文件夹。创建两个文件 test3.c 和 test3.h。修改 solutions\lab3\k1_apps\menu.c
。这里的代码我都会贴在最后。
{
{< image src=“https://cdn.ftls.xyz/images/2021/11/haas/haas5.png” caption=“创建test3” >}}
代码变量说明:tem 温度 ,hum 湿度 ,xyz[3] 六轴传感器传出数据。
烧录之后
{
{< image src=“https://cdn.ftls.xyz/images/2021/11/3.jpg” caption=“正常显示数据和传感器信息” >}}
注意
创建文件之后,一定要修改solutions\lab3\package.yaml的source_file。
增加代码
source_file:
<略>
- "k1_apps/test3/test3.c"
- "k1_apps/test4/test4.c"
- "data_model_basic_demo.c"
<略>
实验效果如下。
六轴传感器传的是 float 类型,显示不下于是强转为 short 类型。
目前效果不是很好,六轴传感器显示需要先运行官方陀螺仪示例之后才可以正常显示。待修复此特性。
配网WIFI
点击 VScode 状态栏的串口,选择对应的串口,选择1500000。这时候连接开发板并且开机能够看到一堆文字闪过。等待文字稳定后按下回车,能看到(ash:/data)#
。这时候我们就可以输入CLI命令了。
输入netmgr -t wifi -c ssid password
就可以配网了。ssid替换为WIFI网络名,password替换为WIFI密码。
[ 44.975]<I>eduk1_demo aos_task_delete test3_task
[ 44.976]<I>eduk1_demo aos_task_new homepage_task
(ash:/data)#netmgr -t wifi -c ssid password
配网之后开发板主页面会显示IP右上角会显示WIFI图标。还能看到 IP。
{
{< image src=“https://cdn.ftls.xyz/images/2021/11/4.jpg” caption=“配网WIFI” >}}
数据上云
基于HaaS EDU K1教育开发案例合集和Wi-Fi设备连接阿里云示例。复制Wi-Fi设备连接阿里云示例下的 data_model_basic_demo.c 到 lab3\solutions\lab3\data_model_basic_demo.c。
修改三元组为自己设备的三元组,具体步骤键Wi-Fi设备连接阿里云示例 4.2 软件实现。
修改data_model_basic_demo.c内的demo_main()为demo_main2()。
为了让这段程序在连接WIFI后运行,修改solutions\lab3\app_start.c,代码后面有。主要修改 wifi_event_cb 。
被修改的代码:
app_start.c
为了上传传感器数据,为data_model_basic_demo.c增加头文件
// 传感器数据
#include "drv_temp_humi_si_si7006.h"
#include "drv_temp_humi_sensylink_cht8305.h"
#include "drv_acc_gyro_inv_mpu6050.h"
#include "drv_acc_gyro_qst_qmi8610.h"
修改data_model_basic_demo.c主循环上传温湿度传感器和六轴传感器数据,abc 为计数,temp 温度,hump 湿度,xyz为六轴传感器数据。
short int abc = 0;
float temp, hump,xyz[3];
uint8_t info[30];
/* 主循环进入休眠 */
cht8305_init();
FisImu_init();
while (1) {
if(abc>=100) {
abc=0;}
FisImu_read_acc_xyz(xyz);
cht8305_getTempHumidity(&hump, &temp);
/* TODO: 以下代码演示了简单的属性上报和事件上报, 用户可取消注释观察演示效果 */
sprintf(info, "{\"LightSwitch\": %d,\"tem\": %.1f,\"hum\": %.1f,\"rax\": %d,\"ray\": %d,\"raz\": %d}", abc,temp,hump,(short)xyz[0],(short)xyz[1],(short)xyz[2]);
demo_send_property_post(dm_handle, info);
demo_send_event_post(dm_handle,