这块我还算比较有经验,因为前几年一直在做物联网产品,蓝牙、WiFi、4G、Lora等无线通讯技术都有涉及。
目前无际单片机也有物联网相关的项目实战,可以更系统、深刻地学习物联网产品的局域无线组网和广域网通讯。
先告诉大家一个好消息,如果你懂蓝牙协议栈开发、WiFi之类的主流无线通讯技术,那你的工资会比普通单片机工程师会高一点,特别是在前几年物联网终端设备热火朝天的时候。
Ok,下面开始讲干货。
一、蓝牙怎么学?
市面上大多数公司,都是直接用蓝牙模块,就是直接通过串口发AT指令控制蓝牙数据交互。
如果是这种,基本不用熟悉蓝牙更深入的东西,看懂模块数据手册就够了。
如果你有幸接触蓝牙协议栈二次开发的产品,并且摸透里面代码,你的代码水平会有质的飞跃。
可以参考以下学习顺序:
1.学习蓝牙协议和规范
蓝牙一般包括传统蓝牙(BR/EDR)和低功耗蓝牙(BLE)。
先了解蓝牙技术的基础概念,包括蓝牙协议栈、蓝牙规范、蓝牙传输模式等等。
可以从蓝牙技术联盟(Bluetooth SIG)官网获取相关信息。
2.选择合适的平台
前期可以选择一些比较主流的蓝牙芯片品牌,比如TI、Nordic,然后去找这些厂家主流的蓝牙芯片开发板。
3.熟悉蓝牙通讯流程
了解蓝牙连接的建立过程,包括广播、扫描和配对等,自己先在开发板的例程上玩一遍。
4.学习蓝牙数据传输
这个是最重要的了,到这一步就已经开始进入蓝牙协议栈的二次开发了。
学习协议栈有个技巧,一切以实现功能为主,如果你想吃透协议栈,那至少需要耗费几个月时间,除非你的编程基础非常好,之前自己写过一些小系统。
一般,我们只要找到关键的代码就行了,比如说蓝牙比较关键的就是数据收发。
蓝牙是靠一个叫特征值来发送和接收数据的,不知道为什么要起这么难理解的名字,如果你理解不了,直接理解成数据传输管道吧。
5.实践
学完基本的,可能尝试脱离开发板去做具体的项目。
我曾经用过CC2541和CC2640这两款蓝牙芯片做过项目,都是TI的。
出于成本和产品尺寸的限制,只能在蓝牙芯片上进行协议栈二次开发,增加产品功能。
刚开始看代码,说真的,有点颠覆我的认知,原来单片机的程序也有写这么复杂的。
TI的里面还有个OSAL系统,光是研究这个系统就够你喝一壶了。
二、WiFi怎么学?
WiFi基本上都是用现成模块比较多,唯一接触过二次开发的也就是汉枫的模块,不过也就是改改服务器IP和数据收发而已。
像MQTT一般模块本身已经帮你实现了,你直接调用即可。
如果你想深入开发,我不能给太多建议,可以尝试以下路径:
1.学习网络的基础知识
包括网络拓扑结构、TCP/IP协议、路由、交换机等内容。
2.了解WiFi协议的基本概念
包括802.11协议、无线接入点、WiFi频段、SSID等。
3.学习无线网络编程的基础知识
包括使用WiFi模块的API,如连接WiFi、扫描可用WiFi网络、发送和接收数据等。
4.把知识落地
可以看看有没有开发板,在开发板上学习如何在嵌入式系统中使用WiFi模块,如何配置无线网络、如何在应用程序中实现连接WiFi网络、发送和接收数据等功能。