1 Star 0 Fork 146

呆懵的蜗牛 / knowledge_demo_temp

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
readme.md 8.06 KB
一键复制 编辑 原始数据 按行查看 历史

基于OpenHarmony的智能指南针-设备端

此项目是基于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接口获取底层网络数据,并在页面展示,展示效果如下图所示。

1. 磁力计在平面上的校准

1.1 为什么要校准

电子指南针主要是通过感知地球磁场的存在来计算磁北极的方向。然而由于地球磁场在一般情况下只有微弱的0.5高斯,而一个普通的手机喇叭当相距2厘米时仍会有大约4高斯的磁场,一个手机马达在相距2厘米时会有大约6高斯的磁场,这一特点使得针对电子设备表面地球磁场的测量很容易受到电子设备本身的干扰。

磁场干扰是指由于具有磁性物质或者可以影响局部磁场强度的物质存在,使得磁传感器所放置位置上的地球磁场发生了偏差。如下图所示,在磁传感器的XYZ坐标系中,绿色的圆表示地球磁场矢量绕z轴圆周转动过程中在XY平面内的投影轨迹,再没有外界任何磁场干扰的情况下,此轨迹将会是一个标准的以0(0,0)为中心的圆。当存在外界磁场干扰的情况时,测量得到的磁场强度矢量α将为该点地球磁场β与干扰磁场γ的矢量和。记作:

$$ α(测量值)= β(地球磁场)+ γ(干扰磁场) $$ 磁场示意图

1.2 校准方法

针对XY轴的校准,将配备有磁传感器的设备在XY平面内自转,如图1,等价于将地球磁场矢量绕着过点 $$ 0(γx,γy) $$ 垂直于XY平面的法线旋转,而红色的圆为磁场矢量在旋转过程中在XY平面内投影的轨迹。这可以找到圆心的位置为((Xmax+Xmin)/2,(Ymax+Ymin)/2)。

设测量值为(a,b),则校准后的值位为( a - ((Xmax+Xmin)/2) , b - ((Ymax+Ymin)/2) ) ,这个值就可以用来计算电子罗盘的偏航角。详情可以参考磁力计电子罗盘学习及校准文档

2.ESP8266 wifi模组开发

2.1 简介

指南针开发的EP8266 wifi模组主要用于和RK3568完成网络通信,ESP8266和STM32通过串口相连,通过发送AT指令的方式来控制。

2.2 开发准备

2.2.1 软件准备

开发用到的软件如下,可通过百度搜索下载

(1)串口调试助手(推荐使用友善之臂的串口调试助手)

(2)网络调试助手

2.2.2 烧录ESP8266固件

(1)将ESP8266烧录口通过USB和电脑连接

(2)打开烧录软件,烧录AT指令的固件,烧录方法步骤如图image-20220311100650456

2.3 开发步骤

2.3.1 通过网络调试助手搭建TCP服务器

image-20220311101644858

2.3.2 通过USB转串口工具连接ESP8266

​ ESP8266的AT指令是通过串口2发送的,连线方式为:

​ TXD2(ESP8266)---RXD(USB转串口工具)

​ TXD2(ESP8266)---RXD(USB转串口工具)

​ GND(ESP8266)---GND(USB转串口工具)

​ 5V(ESP8266) ---5V(USB转串口工具)

image-20220311101718907

2.3.3 ESP8266网络功能调试

串口调试助手发送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								  						#输入数据

image-20220311103410599

2.3.4 配网功能实现

编写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)

3. 程序下载、编译和烧录

3.1 程序下载

(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

3.2 程序编译

环境搭建参考Windows编译OpenHarmony文档,搭建好windows编译环境后,使用windows命令行进入代码目录进行编译。

3.3 程序烧录

(1)elf文件转.hex文件

程序编译成功后,会生成路径为code/out/Geek_Lite_Board/Geek_Lite_Board/unstripped/bin下的.elf文件,如下图所示。

elf文件

在命令行进入所在.elf文件所在目录,在命令行输入如下命令,按下回车,生成烧录程序所用的geek_lite_sdk.hex文件。

objcopy.exe -O ihex geek_lite_sdk.elf geek_lite_sdk.hex

整体效果如下图所示。

elf文件和hex文件

(2)把.hex文件烧录进开发板

下载ST-LINK烧录工具,下载好就安装即可。

打开烧录工具,点击右上角的 “ File ” ,然后点击 ” Open file “ ,找到上面所说的.hex文件。

下载工具1

点击 “ Target ” ,选择 “ Connect ” ,连接开发板。

烧录工具2

点击 “ Target ” ,选择 “ Program ” ,弹出如下界面,点击 “ Start ”开始烧录程序。

烧录工具3

到这里程序已经烧录成功,可以上手体验了!!!

1
https://gitee.com/liujiawm/knowledge_demo_temp.git
git@gitee.com:liujiawm/knowledge_demo_temp.git
liujiawm
knowledge_demo_temp
knowledge_demo_temp
master

搜索帮助