同步操作将从 OpenHarmony-SIG/knowledge_demo_temp 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
此项目是基于OpenHarmony操作系统,设备侧使用Geek_Lite_Board开发板,主控芯片为STM32F427IIH6,操作系统为OpenHarmony 3.0。应用端采用大禹系列HH-SCDAYU200开发板套件,主控芯片为瑞芯微RK3568芯片,操作系统为OpenHarmony 3.1 release。
STM32通过mpu9250九轴姿态传感器中内置的ak8963磁力计获取磁场数据,把转换后的数据通过ESP8266无线模块把数据发送到RK3568。RK3568的应用是采用方舟开发框架(ArkUI)基于JS扩展的类web开发范式编写页面;通过NAPI接口获取底层网络数据,并在页面展示,展示效果如下图所示。
电子指南针主要是通过感知地球磁场的存在来计算磁北极的方向。然而由于地球磁场在一般情况下只有微弱的0.5高斯,而一个普通的手机喇叭当相距2厘米时仍会有大约4高斯的磁场,一个手机马达在相距2厘米时会有大约6高斯的磁场,这一特点使得针对电子设备表面地球磁场的测量很容易受到电子设备本身的干扰。
磁场干扰是指由于具有磁性物质或者可以影响局部磁场强度的物质存在,使得磁传感器所放置位置上的地球磁场发生了偏差。如下图所示,在磁传感器的XYZ坐标系中,绿色的圆表示地球磁场矢量绕z轴圆周转动过程中在XY平面内的投影轨迹,再没有外界任何磁场干扰的情况下,此轨迹将会是一个标准的以0(0,0)为中心的圆。当存在外界磁场干扰的情况时,测量得到的磁场强度矢量α将为该点地球磁场β与干扰磁场γ的矢量和。记作:
$$ α(测量值)= β(地球磁场)+ γ(干扰磁场) $$
针对XY轴的校准,将配备有磁传感器的设备在XY平面内自转,如图1,等价于将地球磁场矢量绕着过点 $$ 0(γx,γy) $$ 垂直于XY平面的法线旋转,而红色的圆为磁场矢量在旋转过程中在XY平面内投影的轨迹。这可以找到圆心的位置为((Xmax+Xmin)/2,(Ymax+Ymin)/2)。
设测量值为(a,b),则校准后的值位为( a - ((Xmax+Xmin)/2) , b - ((Ymax+Ymin)/2) ) ,这个值就可以用来计算电子罗盘的偏航角。详情可以参考磁力计电子罗盘学习及校准文档。
指南针开发的EP8266 wifi模组主要用于和RK3568完成网络通信,ESP8266和STM32通过串口相连,通过发送AT指令的方式来控制。
开发用到的软件如下,可通过百度搜索下载
(1)串口调试助手(推荐使用友善之臂的串口调试助手)
(2)网络调试助手
(1)将ESP8266烧录口通过USB和电脑连接
(2)打开烧录软件,烧录AT指令的固件,烧录方法步骤如图
ESP8266的AT指令是通过串口2发送的,连线方式为:
TXD2(ESP8266)---RXD(USB转串口工具)
TXD2(ESP8266)---RXD(USB转串口工具)
GND(ESP8266)---GND(USB转串口工具)
5V(ESP8266) ---5V(USB转串口工具)
串口调试助手发送AT指令控制ESP8266完成配网,并测试数据收发.
发送AT指令的顺序如下:
AT #测试AT功能,同时测试模组已经ready
AT+CIPCLOSE #关闭此前的TCP/UDP连接(如果有连接的话)
AT+CWMODE=1 #设置模组进入STA模式
AT+CWJAP="ssid","password" #连接wifi
AT+CIFSR #查看模组IP地址
AT+CIPSTART="TCP","TCP服务器IP地址",8080 #连接TCP服务器
AT+CIPSEND=len #发送长度len的数据到服务器
Abcde #输入数据
编写STM32程序,实现AT指令控制ESP8266配网,并完成数据收发。
(1)串口驱动的编写
编写串口初始化函数,初始化串口2的参数是115200,n,1,关键性函数:void Wifi_Init(int baud_rate)
(2)AT指令的发送
实现各种AT指令的发送,关键函数:void ESP8266_Send_AT_Cmd(char *cmd,u32 time),参数cmd是AT指令,time是超时时间
(3)AT指令回复的接收和处理
实现AT指令发送后模组返回数据的处理,
数据接收函数:void USART2_IRQHandler(void)
数据处理函数:static int ESP8266AckDataDeal(u8 *pdat, u16 length, u8 * err)
(4) 配网流程的实现
按照特定的顺序发送AT指令实现ESP8266连接TCP服务器,并处理其中的错误,
关键性函数:signed char ESP8266_start_TCP(void)
(5)TCP网络数据收发
实现网络数据的发送和接收
TCP数据发送函数:void ESP8266_send_data(char *dat,unsigned int len)
TCP数据接收函数: void USART2_IRQHandler(void)
(1)使用git下载
下载STM32F427 OpenHarmony适配代码:
git clone git@gitee.com:geekros/OpenHarmony_For_STM32F427.git --depth=1
下载device代码:
git clone git@gitee.com:openharmony-sig/knowledge_demo_temp.git --depth=1
代码拷贝:
a.拷贝knowledge_demo_temp\dev\team_x\electronic_compass\wifi.c 到
OpenHarmony_For_STM32F427\dev-code\device\Geek_Ros\Geek_Lite_Board\modular\src 覆盖原来的文件
b.拷贝knowledge_demo_temp\dev\team_x\electronic_compass\wifi.h 到
OpenHarmony_For_STM32F427\dev-code\device\Geek_Ros\Geek_Lite_Board\modular\inc 覆盖原来的文件
c.拷贝knowledge_demo_temp\dev\team_x\electronic_compass\main.c 到
OpenHarmony_For_STM32F427\dev-code\device\Geek_Ros\Geek_Lite_Board\main\src 覆盖原来的文件
c.拷贝knowledge_demo_temp\dev\team_x\electronic_compass\serial_task.c 到
OpenHarmony_For_STM32F427\dev-code\device\Geek_Ros\Geek_Lite_Board\main\src 覆盖原来的文件
(2)直接下载压缩包
代码地址:dev-code
环境搭建参考Windows编译OpenHarmony文档,搭建好windows编译环境后,使用windows命令行进入代码目录进行编译。
(1)elf文件转.hex文件
程序编译成功后,会生成路径为code/out/Geek_Lite_Board/Geek_Lite_Board/unstripped/bin下的.elf文件,如下图所示。
在命令行进入所在.elf文件所在目录,在命令行输入如下命令,按下回车,生成烧录程序所用的geek_lite_sdk.hex文件。
objcopy.exe -O ihex geek_lite_sdk.elf geek_lite_sdk.hex
整体效果如下图所示。
(2)把.hex文件烧录进开发板
下载ST-LINK烧录工具,下载好就安装即可。
打开烧录工具,点击右上角的 “ File ” ,然后点击 ” Open file “ ,找到上面所说的.hex文件。
点击 “ Target ” ,选择 “ Connect ” ,连接开发板。
点击 “ Target ” ,选择 “ Program ” ,弹出如下界面,点击 “ Start ”开始烧录程序。
到这里程序已经烧录成功,可以上手体验了!!!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。