张兵
就读于贵州黔南科技学院
首期openharmony开源开发者成长计划“智能语音垃圾桶”项目开发者
一、搭建编译环境
1、下载虚拟机vmware和ubuntu20.0.14 下载 vmware workstation pro | cn
https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html
ubuntu系统下载 | ubuntu
https://cn.ubuntu.com/download
2、 安装vm完成后打开vm,点击创建新的虚拟机
3、选择典型点击下一步,选择下载的ubuntu,点击下一步,创建完成后虚拟机自动安装ubuntu
4、安装完成后获取openharmony源码可参考
https://docs.openharmony.cn/pages/v3.1/zh-cn/device-dev/get-code/sourcecode-acquire.md/
5、安装编译工具
(1)安装node.js 打开ubuntu终端输入命令安装: sudo apt-get install nodejssudo apt-get install npmnode --version //查看nodejs版本npm --version //查看npm版本 (2)安装python编译环境 sudo apt-get install python3.8sudo apt-get install python3-pipsudo pip3 install setuptoolssudo pip3 install kconfiglib sudo pip3 install pycryptodomesudo pip3 install six --upgrade --ignore-installed sixsudo pip3 install ecdsa (3) 安装scons python3 -m pip install sconsscons -v //查看版本 如图:
(4)安装hb工具代码测试 python3 -m pip install --user ohos-buildvim ~/.bashrc //设置环境变量export path=~/.local/bin:$path //将以下命令拷贝到.bashrc文件的最后一行,保存并退出source ~/.bashrc //更新环境变量 执行hb -h,有打印以下信息即表示安装成功。
(5) 安装gcc_riscv32
下载gcc_riscv32镜像
https://gitee.com/link?target=https%3a%2f%2frepo.huaweicloud.com%2fharmonyos%2fcompiler%2fgcc_riscv32%2f7.3.0%2flinux%2fgcc_riscv32-linux-7.3.0.tar.gz
设置环境变量
将压缩包解压到根目录
tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -c ~ //文件名需要与下载的文件相匹配设置环境变量。vim ~/.bashrc //设置环境变量export path=~/gcc_riscv32/bin:$path //将以下命令拷贝到.bashrc文件的最后一行,保存并退出source ~/.bashrc //更新环境变量riscv32-unknown-elf-gcc -v //显示版本号,则安装成功 6、修改usr_config.mk文件 文件在openharmony源码目录下 device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk config_i2c_support=yconfig_pwm_support=y 7、修改wifiservice文件夹 文件在openharmony源码目录下 device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_hotspot.c enablehotspot函数中屏蔽如下字段 //if (sethotspotipconfig() != wifi_success) { // return error_wifi_unknown; //}地址:device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_device.cdispatchconnectevent函数下 屏蔽stasetwifinetconfig相关代码行 //stasetwifinetconfig(hi_wifi_evt_connected); //stasetwifinetconfig(hi_wifi_evt_disconnected); 二、创建项目文件夹
1、在openharmony1.01版本创建一个项目demo 在源码目录下的vendor/team_x创建smart_demo
在scr里面添加我们写的代码:
2、初始化uart串口
首先我们需要创建一个初始化uart串口的程序
将gpio0初始化为tx端,将gpio1初始化为rx端
void uartinit(void){ raiselog(log_level_info,[2022012x01] entry into uartinit); iotgpioinit(hal_wifi_iot_io_name_gpio_0); haliosetfunc(hal_wifi_iot_io_name_gpio_0, wifi_iot_io_func_gpio_0_uart1_txd); iotgpioinit(hal_wifi_iot_io_name_gpio_1); haliosetfunc(hal_wifi_iot_io_name_gpio_1, wifi_iot_io_func_gpio_1_uart1_rxd); hi_uart_attribute uart_attr = { .baud_rate = uart_baud_rate, /* baud_rate: 9600 */ .data_bits = uart_data_bits, /* data_bits: 8bits */ .stop_bits = uart_stop_bits, .parity = 0, } raiselog(log_level_info,[2022012x01] uart_init success); /* initialize uart driver */ hi_u32 ret = hi_uart_init(hi_uart_idx_1, &uart_attr, hi_null); if (ret != hi_err_success) { printf([dustbin_tes3]failed to init uart! err code = %d, ret); return; }} 3、创建线程任务 static void *uart_demo_task(void){ static uint16_t countsendtimes = 0; static uint8_t countreceivetimes = 0; uartcontroller.isreadbusy = false; printf([initialize uart successfully); uartinit(); while (1) { osdelay(50); uartreceivemessage();//collecting serial port data hi_sleep(smart_bin_sleep_2500ms); } return 0;}static void iotmainentry(void){ osthreadattr_t attr; raiselog(log_level_info, data:%s time:%s , __function__, __date__, __time__); // create the iot main task attr.attr_bits = 0u; attr.cb_mem = null; attr.cb_size = 0u; attr.stack_mem = null attr.stack_size = config_task_main_stacksize; attr.priority = config_task_main_prior; attr.name = iotmain; (void) osthreadnew((osthreadfunc_t)uart_demo_task, null, (const osthreadattr_t *)&attr); return;}app_feature_init(iotmainentry); 4、接收串口数据 static void uartreceivemessage(void){ char *recdata; printf(----listening----); raiselog(log_level_info,start listening serial port); if (uartisbufempty()) { return; } if (uartcontroller.isreadbusy) { return; } uartcontroller.isreadbusy = true; g_receiveddatalen = hi_uart_read(uart_num, g_uart_buff, uart_buff_size); if (g_receiveddatalen > 0) { printf(handleuartreceivemessage rcvdata len:%d,msg:%s., g_receiveddatalen, g_uart_buff); setvoicecommand();//setting voice commands memset(g_uart_buff, 0, sizeof(g_uart_buff)); g_receiveddatalen = 0; } uartcontroller.isreadbusy = false;} 当hi3861开发板接收到其他开发板传输的数据后,可以通过串口打印出来,对此可以写一个解析命令,对发送的字符串,执行相应的命令
注:在接线时,要将tx与另一个开发板的rx连接,因为在uart串口协议中,通过tx(发送引脚)和rx(接收引脚)进行数据传输与接收,需要将tx发送引脚与另一开发板的rx接收引脚相连接,故需要交叉连接以保证两块开发板的正常通信。
ILFORD发布新相纸 让你的宝丽来相机焕然一新
中国企业5G研发劲头足 频谱战略规划待落实
如何避免石墨负极低温析锂问题
ABB完成对通用电气GEIS收购案,价值26亿美元
手机的加速度传感器成为了盗窃的帮凶?
Hi3861开发板与其它开发板的通信
贸泽电子于2020上半年新增45家制造商合作伙伴 进一步扩充产品线阵容
英特尔新平台服务器版图重整 英业达抢单大赢家
A700 Plus高性能AO-CAP铝聚合物贴片电容器
ADI公司的ADP8870白光LED电荷泵背光驱动器专为便携
恒流二极管的特性、结构和应用
全球服务机器人行业市场规模的分析
【产品应用】用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (8)- AWBlock
三星Galaxy Lite AR眼镜渲染图曝光
16 × 16模拟交叉点开关矩阵ADV3226芯片
RFID技术助力万物标签加密,从而保护供应链
用于双极性A至D转换器的单电源RS232接口
投影界新秀 性能与资源双优 当贝投影仪F1——体验满满的诚意
以C#编写并使用NET-Framework的OPC自定义接口
为电动汽车充电需要多少太阳能电池板