1. 课程导学与硬件准备

各位同学,欢迎来到这门实战课。我是你们的讲师,一个在嵌入式圈子里摸爬滚打了十几年的老工程师。今天咱们先不急着写代码,把地基打牢再说。

这一章,我会带你搞清楚三件事:嵌入式系统到底是个啥玩意儿?LoRa 和 GPS 这两个技术凭什么能组合在一起干活?以及,咱们得准备哪些家伙事儿才能把课跟下来。

嵌入式系统:不只是单片机

很多人一提到嵌入式,脑子里就蹦出「单片机」。其实,嵌入式系统的范围比这大得多。它是指那些「嵌入」到某个设备里,专门干一件事的计算机系统。你的手机、路由器、智能手表、甚至微波炉里的控制板,都是嵌入式系统。

我个人习惯把嵌入式系统拆成三个层次来看:

  • 硬件层:CPU、内存、外设接口(UART、SPI、I2C)。这是骨架。
  • 固件层:裸机程序或 RTOS(实时操作系统)。这是肌肉。
  • 应用层:业务逻辑,比如解析 GPS 数据、发送 LoRa 报文。这是灵魂。

咱们这门课,三个层次都会涉及。但重心会放在「硬件驱动」和「应用层」的衔接上。说白了,就是教你怎么让单片机跟 LoRa 模块、GPS 模块「说上话」。

我的经验: 刚入行那会儿,我总觉得只要把代码写对就行。后来发现,不懂硬件原理,写出来的驱动全是坑。比如 SPI 时序差了几个纳秒,模块就是不干活。所以,别跳过硬件部分。

LoRa 技术原理:远距离与低功耗的平衡

LoRa 是「Long Range」的缩写。它是一种扩频调制技术,由 Semtech 公司发明。它的核心优势就两个:传得远、功耗低。

为什么它能传得远?因为 LoRa 用了「啁啾扩频」(CSS)技术。简单说,就是把一个窄带信号,在频域上「拉宽」了。这样做的好处是,抗干扰能力极强,接收灵敏度可以做到 -140 dBm 以下。我在一个城市公园里做过测试,用 20 dBm 的发射功率,空旷地带轻松传了 3 公里。

但 LoRa 也有短板:速率低。它的有效数据速率通常在 0.3 kbps 到 50 kbps 之间。你想想看,传一张高清照片肯定不行,但传几个传感器数值、一个 GPS 坐标,绰绰有余。

LoRa 的几个关键参数,你得记住:

参数 说明 我的建议
扩频因子 (SF) SF7 ~ SF12,越大越远,但越慢 一般用 SF9 做平衡
带宽 (BW) 125 kHz / 250 kHz / 500 kHz 125 kHz 最常用
编码率 (CR) 4/5 ~ 4/8,越高越抗干扰 默认 4/5 即可
发射功率 2 dBm ~ 20 dBm 注意各国法规限制
避坑指南: 我曾经在一个项目中,为了追求最远距离,把 SF 设成了 12。结果数据包在空中飞了将近 2 秒,网关那边一直丢包。后来才发现,SF 越大,空中传输时间(ToA)越长,反而容易受干扰。别盲目追求极限参数。

GPS 定位基础:从卫星到坐标

GPS 全称是 Global Positioning System,美国佬搞的。咱们常用的北斗、GLONASS 也是类似原理。GPS 模块通过接收至少 4 颗卫星的信号,计算出自己的经纬度和海拔。

模块输出的数据格式,99% 都是 NMEA-0183 协议。这是一种纯文本协议,以 $ 开头,以 <CR><LF> 结尾。最常用的语句是 $GPGGA 和 $GPRMC。

举个例子,一条典型的 GGA 语句长这样:

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

我来给你拆解一下:

  • 123519:UTC 时间 12:35:19
  • 4807.038,N:北纬 48 度 07.038 分
  • 01131.000,E:东经 11 度 31.000 分
  • 1:定位状态(1 表示单点定位)
  • 08:使用 8 颗卫星
  • 545.4,M:海拔 545.4 米

咱们后面写驱动,主要就是解析这种字符串。别怕,C 语言里用 strtok 或者 sscanf 就能搞定。

开发板选型:为什么是 STM32?

市面上单片机那么多,为什么我选 STM32?原因有三:

  1. 生态成熟:HAL 库、LL 库、CubeMX 配置工具,资料多到你看不完。
  2. 性能够用:咱们用的 STM32F103 系列,72 MHz 主频,足够同时跑 LoRa 驱动和 GPS 解析。
  3. 便宜耐造:一块最小系统板十几块钱,烧了也不心疼。

具体到咱们课程,我推荐用 STM32F103C8T6 核心板。它有两个 USART,一个给 LoRa 模块,一个给 GPS 模块,刚刚好。

注意: 如果你手头是 STM32F4 系列,也没问题。代码基本通用,只需要注意时钟配置和引脚重映射。

所需元器件清单

工欲善其事,必先利其器。下面这个清单,建议你一次性买齐。我在淘宝上买过很多次,总价不超过 100 块钱。

元器件 型号/规格 数量 备注
STM32 核心板 STM32F103C8T6 1 带 USB 转串口
LoRa 模块 E32-433T20S (SX1278) 2 至少两个才能通信
GPS 模块 ATGM336H (北斗+GPS) 1 带陶瓷天线
USB 转 TTL CH340G 1 调试用
杜邦线 公对母 / 母对母 各 20 根 颜色分开好区分
面包板 830 孔 1 不用焊接,方便改
LED + 电阻 5mm LED + 220Ω 若干 指示状态用
购买建议: LoRa 模块尽量买带「屏蔽罩」的版本,抗干扰能力强一些。GPS 模块的天线要买「有源」的,不然搜星慢得让你怀疑人生。

本章知识体系

下面这张图,把咱们这一章的核心内容串起来了。你可以把它当成一张「地图」,后面每学一个知识点,都能在这张图上找到位置。

第一章知识体系结构图 第一章:课程导学与硬件准备 嵌入式系统概述 LoRa 技术原理 GPS 定位基础 硬件层 固件层 应用层 扩频因子 带宽 / 编码率 发射功率 NMEA 协议 GGA / RMC 坐标解析 硬件准备:元器件清单 STM32 核心板 LoRa + GPS 模块 面包板 + 杜邦线 核心逻辑:硬件驱动 → 数据解析 → 无线传输,三者缺一不可

嗯,这张图你看明白了吗?从上到下,咱们先搞懂三个技术各自是什么,然后统一到「硬件准备」这个落脚点上。后面的课程,就是围绕这张图展开的。

好了,这一章的内容就到这里。东西不多,但都是后面实战的根基。尤其是元器件清单,建议你对照着买齐,别等到写代码的时候才发现缺这缺那。