记录

  • 应用外设
    • Gps 模块
    • WiFi 模块
    • 蓝牙模块
    • 低功耗

在无比漫长寒假中接取的 STM32L0 任务使我对 STM32 开发流程有了大致认识。
(重点吐槽下亿百特家的模块手册中居然一点例程代码都不给!)

应用外设

Gps 模块、WiFi 模块、蓝牙模块都是通过串口与 MCU 相连接,对于串口收发数据与分析思路显得尤为重要。
(苦恼了 3 天的 Gps 数据分析被实验室老大一语道破,两小时就完成了 QAQ)

Gps 模块

GPS 模块是集成了 RF 射频芯片、基带芯片和核心 CPU,并加上相关外围电路而组成的一个集成电路。

目前GPS模块的GPS芯片大部分采用全球市占率第一的SiRFIII系列为主。由于GPS模块采用的芯片组不一样,性能和价格也有区别,采用SIRF三代芯片组的GPS模块性能最优,价格也要比采用MTK或者MSTAR等GPS芯片组的贵很多。现阶段也持续在芯片升级,比方sirf4,然后又是sirf5,总体灵敏度提高了不少,缩短了定位时间,同时也帮助了客户快速的进入了定位应用状态。

学长帮我购买的是 E108-GN01-TB
拿到模块的第一时间肯定是确定模块是否正常工作(怪硬件!怪元器件!)

首先拿 naviTrack 上位机连接 Gps 模块的外置串口,收到的数据如图所示。在 Gps NMEA 数据介绍 这篇博客中可以得知相关数据的含义。

找到自己“心仪”的数据后,接下来就是接受她并展示出来辣。
开始我苦于没有思绪,跟着 某火 某点 的思路,一次接收上百上千条字符串逐条按数据头用strstr()与查找逗号解析,后在测试接收 Gps 数据并通过串口打印时发现芯片在工作一段时间后会跑飞(至今未破案,但我认为是在 Gps 串口接收 Usb 串口转发时不同步与中断过程中处理数据时间过久导致的),后在老大指点下想出新的解析思路。

状态图

校验 $ 状态开始,若接收到 $ 代表接下来的数据是一帧完整数据,进入校验数据头状态
若接收到的数据头 为 目标数据头,那么就进入接收状态,反之退回到校验 $ 状态
若在接收状态得到了 $ 则说明这一数据帧已结束,则回到校验数据头状态,继续校验数据头。
而数据处理的过程应该接收完完整一帧数据后,也就是接收状态转移到校验数据头状态之中。
(在此先上流程图与状态转移图,相关代码考完试补全)
单帧解析思路按逗号开始与结束
例如:我的需求是得到经纬度与日期时间,所以我选择了 GPRMC这帧数据

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
<1> UTC时间,hhmmss(时分秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<4> 纬度半球N(北半球)或S(南半球)
<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
<7> 地面速率(000.0~999.9节,前面的0也将被传输)
<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也将被传输)
<11> 磁偏角方向,E(东)或W(西)
<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

在去掉 $GPRMC 后遍历 Gps 数据数组提取出逗号之间的数据依次放入结构,即可得到自己想要的信息。

  1. UTC时间需要通过小时位 +8 得到北京时间
  2. 经纬度数据需要转换成dd.mmmmmm才可正常使用(亲测不转换相差几公里)

WiFi 模块

WiFi 模块部分选择的是比较常见的ESP8266系列
这部分原理也是比较简单的,拿到模块的第一时间先外接串口,拿电脑端的串口软件测试模块功能(我使用的是亿百特自己编写的上位机,只是把相关指令都集成在按钮中了,XCOM+AT 指令集也可达到同样效果)。模块调通后,对于模块使用者来说只需要初始化好对应引脚与串口,并正确发送指令。
TCP连接大致流程为

  1. AT+RST //上电重启模块,确保处于初始状态
  2. AT+CWMODE=1 //进入station模式
  3. AT+CWJAP_DEF=“Account”,“Password” //输入账号密码
  4. AT+CIPSTART=“TCP”,“IP 地址”,端口号 //建立连接
  5. AT+CIPMODE=1 //进入透传模式
  6. AT+CIPSEND //透传开始
  7. AT+CIPMODE=0 //退出透传模式
    这里推荐一个 在线 TCP/IP 调试工具 ,提供IP与端口方便大家调试。

蓝牙模块

蓝牙模块选择的是 E104-BT40。
蓝牙在这三个通信模块中比较好配置,上电自动进入 SPP 模式,拿蓝牙调试软件可直接连接通信。
发送数据只需要通过串口 Transmit 即可。
而接收数据则又是一个痛点,在这里蓝牙模块用来接收 WiFi 的账号密码,我为其设置了 3 个标志。

蓝牙状态转移相对于Gps接收就简单了很多(毕竟是自己设计状态),而状态之间利用不常用的ASCII码字符,例如 0x7B-“{” 0x7C-"|" 0x7D-"}"来作为状态转移的标志。
默认处于等待状态,接收到 7B 进入账号状态,收到的字符都存于账号数组中。
在账号状态中,接收到 7C 进入密码状态,接收到的字符都存于密码数组。
在密码状态时,接收 7D ,表明一次接收过程完毕,发送 WiFi 连接指令,然后回到等待状态。
不要在中断中连接 WiFi 不要在中断中连接 WiFi!在中断函数中貌似不允许 delay 过久。不知原因,有没有大佬在评论解释下)

低功耗

关于低功耗的资料还是比较少的,参考了某火代码进入低功耗的方式。

【实验室乱记】从 0 开始的 STM32L0 的 Gps WiFi 蓝牙模块物联网开发相关推荐

  1. 【实验室乱记】基于 STM32 的采集 Adc 与 SD 卡储存

    杂 序 实验室 简介 调用的资源:Adc 调用的外设:SD卡 实现过程 Adc SD 卡 主函数代码 序 这篇文章向大家介绍下基于 STM32F4 的 Adc 采集与 SD 卡储存 实验室 学长的要求 ...

  2. 瑞熙贝通|数字化实验室综合管理系统V3.0

    瑞熙贝通实验室管理系统是基JAVA技术架构的一款纯B/S (浏览器访问)结构的解决方案系统,实现教务管理人员.设备管理人员.实验教学屮心主任.实验室管理员. 老师.学生互动的网络化开放管理平台. 整个 ...

  3. SQL分组后将不存在的组记为0

    说明 最近遇到这么一个需求:统计区间在0-2000,2000-3000,3000-4000,4000-5000,5000+工资的人数. 快速开始 数据如下: 开始看到这个问题,想都没想就开始写了下面的 ...

  4. WindowServer2012R2+Anoconda3.5.0.1+CUDA9.0+cuDNN7.1.3+Tensorflow-gpu1.6离线搭建深度学习开发环境

    WindowServer2012R2+Anoconda3.5.0.1+CUDA9.0+cuDNN7.1.3+Tensorflow-gpu1.6离线搭建深度学习开发环境 关键词:Windows,Tens ...

  5. ESP32开发板 V1.0.0 Rev1 wifi 蓝牙4MB FLASH MicroPython

    简 介: 本文给出了对于ESP32开发板下载相关的MicroPython,使用Thony编程环境完成对于ESP32开发板的一些基础实验.详细的实验命令解释可以结合MicroPython的官方网站. 关 ...

  6. 低功耗蓝牙onscanresult 出来名字为空_浅析BLE5.0蓝牙模块在智能家居的运用

    随着物联网渗透到各个行业领域,也使得各个领域对无线模块BLE蓝牙模块的需求激增.BLE蓝牙模块作为无线通信模块的一种,目前在智能家居.智能穿戴.智慧医疗.蓝牙室内定位等领域已经得到广泛应用.今天,小编 ...

  7. java 蓝牙4.0_《蓝牙4.0 BLE开发完全手册---物联网开发技术实战

    图书目录: 第1章 蓝牙4.0 BLE简介 1.1 无线网络数据传输协议对比 1.2 短距离无线网络的分类 1.2.1 什么是蓝牙4.0 BLE 1.2.2 蓝牙4.0 BLE的特点 1.3 蓝牙4. ...

  8. 入口文件到控制器 php,tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析...

    本文实例讲述了tp5.0框架隐藏index.php入口文件及模块和控制器的方法.分享给大家供大家参考,具体如下: 1. 隐藏入口文件: [ IIS ] 在IIS的高版本下面可以配置web.Config ...

  9. 和菜鸟一起学android4.0.3源码之USB wifi移植心得

    转载地址:http://blog.csdn.net/eastmoon502136/article/details/7850157 一天又过去了,台风也走了有些时候了.想了想,自己还是冲动了一把,不该发 ...

  10. 智能无障碍轮椅——DX-BT04 2.0蓝牙模块

    文章目录 常用的蓝牙模块有哪几种? 蓝牙的透传 蓝牙的运行模式 开发方式 AT指令集开发方式 AT指令集 BT-04调试 硬件图 DX-BT04 2.0蓝牙模块介绍 连接步骤: 常用的几个AT指令 主 ...

最新文章

  1. 连连看路径求解的算法
  2. 华为dra路由方式分为relay和proxy_华为云计算(3)——网络虚拟化
  3. python word 1_Python word | 学步园
  4. ASP.NET Core -中间件(Middleware)使用
  5. 袁隆平等专家联袂直播 启动农民丰收节交易会消费季活动
  6. PP管和PPR管的区别在哪
  7. BZOJ 4278 [ONTAK2015]Tasowanie (后缀数组)
  8. SAP Netweaver和Hybris Commerce启动后执行的默认操作
  9. Java ObjectInputStream readShort()方法(带示例)
  10. java打印直角三角形和倒立直角三角形
  11. libtoolize: 未找到命令
  12. 通过keil hex2bin,bin2hex的方法
  13. 《数字图像处理 第三版》(冈萨雷斯)——第七章 小波和多分辨率处理
  14. Linux安装GO语言环境
  15. 简易地图(MKMapView,CLLocationManagerDelegate,CLGeocoder)
  16. 一文读懂反向传播算法原理
  17. angular--安全导航操作符 ( ?. )、非空断言操作符(!) (实用)
  18. smartbi v7 Linux,Smartbi版本更新
  19. IT行业转行UI设计有前景吗
  20. php视频画面区域裁剪,怎么裁剪视频画面

热门文章

  1. 营业执照生成_营业执照丢失补办要哪些资料?营业执照补办流程什么?你想知道的都在这里!...
  2. 广数系统加工中心编程_数控铣床与数控加工中心操作与编程
  3. Matpower软件简介和参数介绍
  4. OpenSSL笔记-PKCS#1和PKCS#8的区别及分别调用的API
  5. 基于小程序的定位健康打卡系统
  6. linux如何删除tree命令,误删tree命令如何恢复
  7. SAS入门之(四)改变数据类型
  8. [附源码]java毕业设计社区医院电子病历系统
  9. c4d阿诺德渲染器支持a卡吗_C4D常用的4大主流渲染器如何选择与比较 (OC/RS/VR/阿诺德)...
  10. 《武义九州》隐私政策