华为小熊派开发记录STM32+MPU6050+WIFI8266

本文介绍了作者在华为小熊派开发比赛中使用STM32、MPU6050传感器和WiFi8266模块接入华为云的过程。遇到的挑战包括LiteOS的移植和代码调整,通过参考优快云上的资源解决了问题。文章分享了关键步骤和参考资料,包括HAL库的使用、ESP8266的通信以及华为云的集成。

华为小熊派开发记录STM32+MPU6050+WIFI8266

前言

忽悠下参加了物联网开发比赛,用了华为小熊派开发板,之前有过TI的开发经历,这次不知道为什么脑热选了华为,总之整个过程走下来感觉TI的开发软件以及给的例程会友好很多,华为的LiteOS移植真的一言难尽。。。不过整个开发期间还是从优快云上捞到很多有用的学习资料,Github打了下辅助,所以现在开发基本完成,想着把我在开发过程中用到的有用的资料整理一下,与大家多多交流~~

STM32CubeMX+MDK+LiteOS

一开始没准备用LiteOS,所以大多数功能都是用MDK v5写的,后来发现WIFI8266必须要在LiteOS上加代码才能接到华为云里面,代码移植移到吐血。。。。
最初用官方移植指南,就太坑了没成功,套娃套到绝望,最后几天转换思路,把写好的MDK项目代码移植到可以使用的LiteOS开发烟感例程里,用复制黏贴的方法将已实现的功能加到例程里,修改了引脚命名,还加了一些头文件的修改。避开两个坑,用HAL库开发,移植以后把所有的HAL_Delay换成例程里的延迟函数,不然会卡死,然后功能要在task里面加,不然没法重复循环。

如果时间充裕的话,还是自己建云比较好。
基于小熊派WIFI-ESP8266实践(中)-多功能处理显示等大杂烩
使用EMQ-X搭建私有MQTT服务器

MPU6050

MPU6050直接使用的HAL库代码是在这里捞的
https://blog.youkuaiyun.com/dodwind/article/details/88624941

不过大家用正点原子的改写也成,没多大差别。

前面完成了小四轴后,看上了手机控的四轴,试玩了一下,不错,就想着DIY出来,漫漫几个月过去了。。。。。终于可以拿出来见人了! 准备全程开源,方便想玩的网友DIY。 板子是在小四轴基础上完善出来的,在经过几次改板后,发现HMC5883的干扰大部分来自板子自身,最后用四层板结构消除。 主控:STM32F103C8 SENSOR: MPU6050 HMC5883 MS5611 电源部分:3-18V IN,输出MAX:750mA 以支持外接设备 外接IO: WIFI GPS PPM并行输入(支持市场上成品接收机) 电机信号PPM输出(支持商用电调)以方便使用在大四轴上。 HMC部分已作消干扰处理,可以在四轴上使用指南针来纠正GIER,锁尾效果更好。 四路LED输出,方便指示工作状态。 电机部分均加二极管续流(此部分在测试时发现,小信号控制时有影响). 另,PPM输入接口为SPI输入,在使用WIFI控制时,方便接入其它设备. 上图: PCBA: 手机界面: 手机软件使用说明: 主板接口说明: 接着上传WIFI模块图片: DIY安装: 程序架构说明: 主要文件 main.c: 例化IO,加载驱动 com.c:打印部分 IOI2C.C: MPU6050 HMC5883 i2c驱动 MPU6050.C: MPU6050驱动及数据读入处理 HMC5883.C: HMC5883驱动及数据读入处理 eeprom.c: 常规数据存储 fc.c: 重要,数据处理,及所有数据耦合,处理。 重要函数:fc.c内 void fly_main(void): 全局处理,协调各部分数据调入,处理 void moto_math(void):重要,姿态数据处理,计算,输出到电机,整机计算在这里, void PPM_main_work(void):PPM遥控数据处理 供 moto_math使用 void PID_data_out(void): PID数据调出 供 moto_math使用 void WIFI_main_work(void):WIFI数据处理,供 moto_math使用 重要点: 1,moto_math(void)内 #ifndef moto_PPM_OUT // 未定义,PWM输出 定义,PPM脉宽输出 未定义,PWM输出,控制MOS,输出直流电机 定义的话,即为输出PPM信号,可以控制商用无刷电调 2,fc.c内 RUN.status: //运行状态,0无信号 1,启动 200.停机, 3,PPM控制和WIFI控制可同时使用, 如果有WIFI控制信号时,PPM自动关闭, 如果WIFI信号丢失,自动打开PPM控制 不想用PPM控制或WIFI控制的网友,只需更改将控制数据输入到PPM[]数组即可。
### MPU6050传感器数据上传至华为云平台的实现方法 MPU6050是一款常用的六轴姿态传感器,集成了三轴加速度计和三轴陀螺仪功能。通过采集其数据,并结合STM32等微控制器进行处理后,可以通过无线模块将数据上传至云端平台,例如华为云。以下是具体的实现步骤。 #### 硬件连接与初始化 MPU6050通常通过I2C总线与主控芯片(如STM32)通信。需要将MPU6050的数据引脚(SDA)、时钟引脚(SCL)连接到STM32对应的I2C接口,并配置相应的电源和上拉电阻。在初始化过程中,需复位MPU6050内部寄存器,通过对电源管理寄存器1(地址为0x6B)的bit7写入1完成复位操作。复位完成后,该寄存器恢复默认值(0x40),随后将其设置为0x00以唤醒MPU6050并进入正常工作状态[^2]。 #### 数据采集与处理 初始化完成后,STM32可通过I2C协议周期性地读取MPU6050的原始数据,包括加速度和角速度信息。由于原始数据为16位有符号整数,需要根据MPU6050的量程设置进行转换,例如加速度值可除以16384(±2g模式下)以获得实际物理单位(g)表示的数值。类似地,陀螺仪数据也可通过换算得到角速度(°/s)[^2]。 #### 数据传输至华为云 采集到的数据需通过无线模块上传至华为云平台。常见的无线传输方案包括Wi-Fi、NB-IoT或LoRa模块。以Wi-Fi为例,STM32可通过UART接口与ESP8266或ESP32模块通信,并使用MQTT协议建立与华为云IoT平台的连接。在连接成功后,将传感器数据按照JSON格式封装,并发布到指定的主题(Topic),实现数据上传[^1]。 以下是一个简单的MQTT数据上传示例代码: ```c #include "mqtt_client.h" // 假设已获取加速度和角速度数据 float ax = 0.5; // X轴加速度(单位:g) float ay = 0.3; // Y轴加速度 float az = 9.8; // Z轴加速度 float gx = 1.2; // X轴角速度(单位:°/s) float gy = 0.8; // Y轴角速度 float gz = 0.1; // Z轴角速度 void send_sensor_data_to_huawei_cloud() { char payload[256]; sprintf(payload, "{\"ax\":%.2f,\"ay\":%.2f,\"az\":%.2f,\"gx\":%.2f,\"gy\":%.2f,\"gz\":%.2f}", ax, ay, az, gx, gy, gz); mqtt_publish("your/topic", payload); // 替换为华为云对应的主题 } ``` #### 华为云平台配置 在华为云IoT平台中,需创建设备并配置产品模型,定义传感器数据的上报格式。设备端通过MQTT协议连接至平台后,即可按预定义的格式上传数据。此外,还可以配置规则引擎对数据进行存储、转发至其他服务或触发告警机制,实现远程监控与分析。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值