无线通信模块简介

QuecPython 是运行在无线通信模块上的开发框架。对于首次接触物联网开发的用户而言,无线通信模块可能是一个相对陌生的概念。本文主要针对无线通信和蜂窝网络本身,以及模块的概念、特性和开发方式进行简要的介绍。

无线通信和蜂窝网络

物联网对无线通信的需求

在 上一节 中,我们介绍了物联网的四层结构。其中的网络层承担着设备接入和数据传输的重要功能。由于物联网设备数量较多,分布的空间范围极大,采用有线以太网方式接入网络显然无法满足需要。因此,大部分物联网设备都具备了无线通信的功能,即通过无线电波作为载体进行信号传输。当前,我们身边常见的无线通信方式包括 Wi-Fi、蓝牙等十余种,不同方式的通信速率和通信距离存在显著差异。

不同的物联网应用场景,对于无线通信的需求存在很大差别。下表展示了当前常见的物联网无线通信技术的特性和使用场景差异。

通信技术速率传输距离功耗成本应用场景
Wi-Fi
  • 室内无线上网
  • 智能家居
蓝牙
  • 资产追踪
  • 定位标签
  • 医疗传感器
  • 智能手表
Zigbee
  • 无线传感器
  • 智能家居
UWB
  • 高精度定位
4G
  • 可移动通信
  • 车辆追踪
  • 智慧城市
NB-IoT
  • 远程抄表
  • 井盖检测
LoRa
  • 园区覆盖
  • 近海渔船检测

蜂窝网络的概念

蜂窝网络(Cellular Network,又称移动网络 Mobile Network)是一种无线通信技术,它能够让移动设备(如手机、平板电脑等)在不同的地理区域内进行语音、数据和多媒体等业务的传输。蜂窝网络是现代移动电话和个人通信系统的基础架构之一,也是推动社会信息化进程的重要力量。

5G 毫米波蜂窝网络结构示意图

如上图所示,蜂窝网络的核心思想是将一个大的服务区域划分为许多个小区(Cell),每个小区内部安装一个基站(Base Station),负责与小区内的移动设备进行无线通信。这些基站之间通过有线或无线的方式连接起来,形成一个覆盖整个服务区域的网络。在传统理论中,这些小区被设计为六边形、圆形或正方形,以六边形最为常见。小区之间彼此连接,实现区域的完整覆盖,形如蜂巢,这也是该项技术被译为蜂窝网络的原因。如今,在实际场景中,很多基站的覆盖区域已经不再是蜂窝形状,但这个称谓依旧流传了下来。

                                                            从 1G 到 5G 的演进

蜂窝网络作为一种无线通信技术,从诞生至今已经经历了五代的发展,每一代都对应着不同的技术和标准,为用户提供了更高的数据传输速度,更好的语音通话质量,以及一系列新特性和新功能。从 1G 的模拟语音通信,到 5G 的全场景互联,蜂窝网络已经成为现代社会运转的必不可少的信息基础设施之一。

物联网和蜂窝网络

与其他无线通信方式相比,蜂窝通信方式依托电信运营商的已有网络,无需手动在应用现场进行网络部署,显著降低了联网的难度和工作量。在农业、环保等物联网应用领域,蜂窝网络已成为首选的无线通信方式之一。

上文提到,蜂窝网络制式多样、标准繁多。物联网需要什么样的蜂窝网络呢?这就要看具体的应用场景和需求了。一般来说,大部分物联网应用场景都包含以下的一些特点:

  • 物联网设备很多,连接数量很大。例如,一个智能城市可能需要连接数以万计的传感器和设备。
  • 物联网设备很小,功耗很低。例如,一个智能水表可能只有几厘米大小,需要长时间工作而不用经常更换电池。
  • 物联网设备很分散,覆盖范围很广。例如,一个智能农业系统可能需要覆盖数百平方公里的农田和牧场。
  • 物联网设备很简单,数据量很小。例如,一个智能停车场系统可能只需要上报车位的占用情况,每次只有几个字节。

根据这些特点,我们可以看出,物联网对蜂窝网络的要求主要有以下几个方面:

  • 大连接:能够支持每个小区同时连接数千甚至数万个设备。
  • 低功耗:能够让设备在低电量下长时间工作,延长电池寿命。
  • 广覆盖:能够提供更强的信号穿透力和覆盖范围,覆盖城市和乡村的各种环境。
  • 低成本:能够降低设备和运营的成本,提高物联网的普及率和可持续性。

而对于速度和带宽,物联网并不需要太高的要求。因为物联网设备传输的数据量相对较小,不需要类似手机和其他智能设备的高速率和高带宽。而且速度和带宽与功耗和成本是相互制约的,提高速度和带宽往往会带来功耗和成本的增加。由此可见,传统的手机 4G 和 5G 网络在很多场合是无法满足物联网应用的需要的。

目前,在国内,物联网领域应用最多的蜂窝通信标准包括 LTE Cat.4,LTE Cat.1 和 NB-IoT。以下的表格对比了它们的特点。

特点LTE Cat.4LTE Cat.1bisNB-IoT
下行速率150 Mbps10.3 Mbps250 kbps
上行速率50 Mbps5.2 Mbps250 kbps
网络覆盖全球 LTE 网络全球 LTE 网络需要部署新的基站或升级现有基站
移动性支持高速移动支持 100 km/h 移动不支持移动
延迟毫秒级毫秒级秒级
成本较高较低较低
功耗较高较低较低
应用场景路由器、销售终端等需要高速数据传输的场景共享支付、工业控制、车载支付、公网对讲、POS 等需要中速数据传输的场景水表、电表、气表等需要低速数据传输且固定不动的场景
语音支持支持 VoLTE(语音通话)支持 VoLTE(语音通话)不支持语音通话
天线配置2x2 MIMO(多输入多输出)1x1 SISO(单输入单输出)1x1 SISO(单输入单输出)
带宽20 MHz1.4 MHz180 kHz

初识模块

无线通信模块,简称模块(Module,亦称模组或单元),是实现数据上云和远程通信的必不可少的组件,在各类物联网场景中已经得到了极为广泛的应用。从功能上看,它是在本地设备和网络之间构建连接的桥梁。像电脑插上 USB 网卡就可以开始上网一样,在嵌入式系统中加入了模块,系统就具有了连接无线网络的可能性。

                                      

搭载移远 EC20 模块的某物联网产品主板

很多初次接触模块的用户会对模块这样一个被金属壳笼罩着的奇怪器件感到陌生,它与传统的芯片和分立器件存在很大的不同。实际上,模块的本质就是一种小型的 PCBA(Printed Circuit Board Assembly,组装电路板)。当我们去掉模块表面的金属屏蔽罩,其内部依旧是熟悉(但更为密集)的 PCB 电路结构。

                               

某 4G 模块的内部图像

有过嵌入式系统开发经验的用户对于“核心板”或者 SoM(System on Module)应该不会陌生。模块同样可理解为一种将无线通信所需的各类器件集成在一起,用于完成本地电路与云端服务的通信功能的高密度、小体积、带屏蔽罩的“核心板”。在本文开头的关于通信的介绍中,我们讲到了编码(解码)和调制(解调)的概念。在无线通信,尤其是蜂窝通信中,这些步骤往往会演变和拓展得极为复杂。模块的作用即是帮助我们完成这些复杂的步骤,实现简单高效的通信。

模块的内部结构较为复杂。如下图所示,可以看到包含主芯片(高通 MDM9607)、存储器、电源管理芯片、功率放大器、射频前端等多种集成器件,以及大量密集分布的小尺寸封装的电阻、电容等元件。显然,模块的复杂度和精密度是远超传统电路板的。

EC20 Mini PCIe 模块的元件组成

主芯片(Main Chip),部分厂家称之为基带(Baseband)芯片或调制解调器(Modem)芯片,是整个模块的核心。它的角色、功能和特性与手机中的 SoC(System on Chip,片上系统)十分相似。随着技术的发展和芯片制造工艺的提升,在现代模块中,主芯片通常已经集成了应用处理器(Application Processor,AP)、基带和射频的相关功能,运行着完备的操作系统(RTOS 或 Linux),对外提供包括 GPIO、USB 等在内的各种接口,并能够根据需求完成各类通信操作。从这个意义上看,模块既像一台没有屏幕和电池的手机,又像一种功能较为复杂的单片机。

高通最新的 QCX216 4G Modem 芯片功能框图

模块的应用模式

对于同一台 Android 手机,不同人有不同的用法。一些用户会安分地使用出厂自带的系统和功能,另一些则热衷于解锁、刷机、root 等操作,更进一步地去开发和挖掘设备的潜力。和手机类似,模块也有这样的两类应用模式:标准模式和二次开发模式。

标准模式

和普通手机一样,模块在出厂时通常都会内置操作系统和应用程序。对于许多用户来说,直接使用模块出厂预置功能就可以满足大部分的网络通信需求。这种无需对模块进行开发和调整,直接作为成品功能单元进行使用的方式称为标准模式或传统模式,是当前应用最普遍的模块使用方式。

标准模式示意图

如上图所示,在标准模式中,模块与主控(MCU,如 STM32)之间通过 UART 或 USB 接口相连接,基于 AT 指令进行双向交互。不难看出,MCU 是整套系统的核心,通信模块是作为 MCU 的一个独立的功能外设的角色而存在的。系统的主要业务逻辑(用户应用,App)在 MCU 中运行,其他外设(图中的 External Devices)通过 UART、I2C 等接口与 MCU 相连,受 MCU 控制。

关于 AT 指令

对于开发者而言,在基于标准模式使用模块时,主要的开发工作量在于主控中运行的用户 App。其业务代码中需要包含较为复杂的 AT 指令发送和返回值解析功能,例如对 URC(Unsolicited Result Code,非请求结果码)的处理等,因而对于初学者难度较大。

除了 AT 指令功能,模块在标准模式下还可以作为无线网卡,为主控或其他上位机提供包括 PPP 拨号上网在内的一系列网络服务,此处不做赘述。

二次开发模式

在前文中我们曾提到,模块就像是功能较为复杂的单片机。事实上,模块所搭载的主芯片为了满足无线通信的需要,通常具有较高的性能和较多的资源,同时也配备了包括 GPIO、ADC、I2C 等在内的丰富的外设接口,只不过在标准模式下,这些资源对于用户通常不是直接可用的。如果能够“解锁”这一限制,模块的应用潜力将极大提升,这就需要对模块进行二次开发。

二次开发的本意是在软件本身提供的一些基本功能和接口的基础上,进行组合和扩展,开发出新的功能来满足用户的特殊需求。具体到模块开发上,二次开发模式允许开发者在底层操作系统的基础上调用 API 编写并运行自己的应用,充分调用模块的各种资源,实现更多的可能性。

二次开发模式示意图

二次开发最重要的意义在于使模块在一定程度上具备了取代标准模式中的主控的能力,因而这种模式又被称为 OpenCPU 或 OpenMCU(不同厂家可能有不同的专门称呼,如移远称之为 QuecOpen)。如上图所示,与标准模式相比,OpenCPU 模式由于将模块本身作为主控使用,用户应用(App)直接置于模块内部运行,外设(图中的 External Devices)与模块直接相连,整个系统中无需外部处理器(MCU)或只需简单的外部芯片(图中的 Simple Microchip),因而可以有效地达到精简硬件设计、降低器件成本、缩小产品尺寸的目的。在单片机价格居高不下的当下,OpenCPU 方案受到了众多公司的青睐。

但是,OpenCPU 方案也具有较为明显的局限性。由于这一模式通常需要用户直接在模块底层运行的操作系统的基础上进行开发,技术门槛较高,传统的、不具备系统级开发经验的单片机开发者很难适应。其次,由于 OpenCPU 技术支持难度大,模块厂家通常只向大客户提供相关的工具和资料,入门较为不便。最后,不同厂家、不同型号的模块,其 OpenCPU 开发环境和开发工具存在较大差别,用户编写的程序在不同模块间的移植存在一定的难度。

使用脚本语言开发模块

传统的 OpenCPU 开发通常使用 C 语言,因此也被称作 CSDK 开发。用户需要直接修改和控制底层的操作系统,具有较高的难度和一定的风险性。在 前文 中,我们介绍了低代码开发方式和它在物联网领域的应用。目前,已经有部分模块厂商通过在 CSDK 的基础上移植解释器 / 虚拟机的方式,使得用户可以使用 Lua、Python 等脚本语言对模块进行二次开发。

与 C 语言相比,脚本语言在语法和使用方式上普遍较为简单,开发者无需花费太多时间和精力即可掌握,并可相对轻松地实现业务逻辑,便于项目的快速开发和功能迭代。同时,对于低代码开发方式而言,开发者通常无需考虑内存回收、基础任务调度等底层细节,显著降低了模块二次开发的技术门槛。最后,对于不同型号的模块,只要它们运行的是同一种脚本语言解释器,用户编写的程序通常只需少量修改(甚至无需修改)即可完成移植。

如下的示例分别是在 EC100Y-CN 模块上使用 C 语言和 Python 语言实现 LED 闪灯的代码。可以看出,脚本语言更加简单直观,易于编写、便于理解。

LED 闪灯代码

使用 QuecOpen(CSDK)使用 QuecPython

#include "ql_application.h"
#include "ql_gpio.h"
#include <stdio.h>static quec_gpio_cfg_t led_gpio_cfg[] =
{{GPIO_PIN_NO_75, PIN_DIRECTION_OUT, PIN_NO_EDGE, PIN_PULL_DISABLE, PIN_LEVEL_LOW}
};static void led_test(void *argv)
{ql_gpio_init(led_gpio_cfg[0].gpio_pin_num, led_gpio_cfg[0].pin_dir, led_gpio_cfg[0].pin_pull, led_gpio_cfg[0].pin_level);while (1){ql_gpio_set_level(led_gpio_cfg[0].gpio_pin_num, PIN_LEVEL_LOW);ql_rtos_task_sleep_s(1);ql_gpio_set_level(led_gpio_cfg[0].gpio_pin_num, PIN_LEVEL_HIGH);ql_rtos_task_sleep_s(1);}
}application_init(led_test, "led_test", 2, 2);

当然,由于使用脚本语言开发时屏蔽了很多底层细节,因而在灵活性和可控性上不如传统的 C 语言开发。此外,脚本语言与 C 语言相比,本身性能相对较差、执行速度较慢,因而在部分对于性能和实时性要求较高的场景下不适合使用。

选择合适的开发方式

下表比较了标准模式,CSDK 二次开发和脚本二次开发在多个维度的差异。用户可根据实际需求选择最适合自己的开发方式。

特性标准模式二次开发(CSDK)二次开发(脚本语言)备注
物料成本⭐⭐
  • 二次开发时,可将模块作为系统主控使用,节省单片机部分的成本。
上手门槛⭐⭐⭐
  • 模块厂商通常只面向大客户提供 CSDK 开发技术支持和其他相关服务。
开发难度⭐⭐⭐
  • CSDK 开发需要开发者拥有 RTOS 或 Linux 开发经验,普通单片机开发者很难快速掌握。
  • 标准模式仅需用户掌握单片机串口通信和字符串处理方法,无特殊要求。
  • 脚本语言开发方式仅需用户掌握基础语法,无特殊要求。
开发周期⭐⭐⭐
  • CSDK 开发的复杂度决定了其较长的开发周期和较高的开发成本。
维护成本⭐⭐⭐⭐⭐
  • 脚本语言的模块化开发的特性有助于保证其长期运行的稳定性,同时普遍内置了 OTA 功能,便于执行远程升级。
灵活性⭐⭐⭐⭐⭐
  • 标准模式下,开发者通常只能调用串口、ADC 等有限的功能。
  • 使用脚本语言开发时,开发者可以通过内置的功能库调用大部分的模块资源。
  • 使用 CSDK 开发时,开发者可以根据自身需求和想法直接控制所有可用资源。
性能-⭐⭐⭐⭐⭐
  • 脚本语言的性能远低于 C 语言,因此在对于运行速度、时间精度(时序)、资源数量等要求较高的少部分场合,不建议采用脚本语言开发。
功耗⭐⭐⭐⭐
  • 一般的 4G 模块在自主休眠时的功耗水平在 mA 级别。
  • 在标准模式下,可以通过使用系统主控切断模块供电的方式实现最大限度的省电,最低功耗可达前者的 1/10。
生态系统⭐⭐⭐⭐⭐⭐
  • 标准 AT 指令开发和脚本开发在网络上都具有较多的公开资料和教程。
  • CSDK 开发通常不具备开放生态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/85229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 中实现首尾无限循环的 ListView

之前已经实现过&#xff1a; Unity 中实现可复用的 ListView-CSDN博客文章浏览阅读5.6k次&#xff0c;点赞2次&#xff0c;收藏27次。源码已放入我的 github&#xff0c;地址&#xff1a;Unity-ListView前言实现一个列表组件&#xff0c;表现方面最核心的部分就是重写布局&…

【C++】 类和对象(上)

1.类的定义 1.1类的定义格式 • class为定义类的关键字&#xff0c;后跟一个类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后⾯分号不能省 略。类体中内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或 者成员函数。…

Transformer架构详解:从Attention到ChatGPT

Transformer架构详解&#xff1a;从Attention到ChatGPT 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 Transformer架构详解&#xff1a;从Attention到ChatGPT摘要引言一、Attention机制&#xff1a;Transformer的…

Rock9.x(Linux)安装Redis7

&#x1f49a;提醒&#xff1a;1&#xff09;注意权限问题 &#x1f49a; 查是否已经安装了gcc gcc 是C语言编译器&#xff0c;Redis是用C语言开发的&#xff0c;我们需要编译它。 gcc --version如果没有安装gcc&#xff0c;那么我们手动安装 安装GCC sudo dnf -y install…

EasyExcel使用导出模版后设置 CellStyle失效问题解决

EasyExcel使用导出模版后在CellWriteHandler的afterCellDispose方法设置 CellStyle失效问题解决方法 问题描述&#xff1a;excel 模版塞入数据后&#xff0c;需要设置单元格的个性化设置时失效&#xff0c;本文以设置数据格式为例&#xff08;设置列的数据展示时需要加上千分位…

【Day41】

DAY 41 简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 →…

Express教程【002】:Express监听GET和POST请求

文章目录 2、监听post和get请求2.1 监听GET请求2.2 监听POST请求 2、监听post和get请求 创建02-app.js文件。 2.1 监听GET请求 1️⃣通过app.get()方法&#xff0c;可以监听客户端的GET请求&#xff0c;具体的语法格式如下&#xff1a; // 1、导入express const express req…

C# 文件 I/O 操作详解:从基础到高级应用

在软件开发中&#xff0c;文件操作&#xff08;I/O&#xff09;是一项基本且重要的功能。无论是读取配置文件、存储用户数据&#xff0c;还是处理日志文件&#xff0c;C# 都提供了丰富的 API 来高效地进行文件读写操作。本文将全面介绍 C# 中的文件 I/O 操作&#xff0c;涵盖基…

Vue-Router简版手写实现

1. 路由库工程设计 首先&#xff0c;我们需要创建几个核心文件来组织我们的路由库&#xff1a; src/router/index.tsRouterView.tsRouterLink.tsuseRouter.tsinjectionsymbols.tshistory.ts 2. injectionSymbols.ts 定义一些注入符号来在应用中共享状态&#xff1a; import…

Electron-vite【实战】MD 编辑器 -- 文件列表(含右键快捷菜单,重命名文件,删除本地文件,打开本地目录等)

最终效果 页面 src/renderer/src/App.vue <div class"dirPanel"><div class"panelTitle">文件列表</div><div class"searchFileBox"><Icon class"searchFileInputIcon" icon"material-symbols-light:…

Remote Sensing投稿记录(投稿邮箱写错、申请大修延期...)风雨波折投稿路

历时近一个半月&#xff0c;我中啦&#xff01; RS是中科院二区&#xff0c;2023-2024影响因子4.2&#xff0c;五年影响因子4.9。 投稿前特意查了下预警&#xff0c;发现近五年都不在预警名单中&#xff0c;甚至最新中科院SCI分区&#xff08;2025年3月&#xff09;在各小类上…

吉林第三届全国龙舟邀请赛(大安站)激情开赛

龙舟竞渡处,瑞气满湖光。5月31日&#xff0c;金蛇献瑞龙舞九州2025年全国龙舟大联动-中国吉林第三届全国龙舟邀请赛(大安站)“嫩江湾杯”白城市全民健身龙舟赛在吉林大安嫩江湾国家5A级旅游区玉龙湖拉开帷幕。 上午9时&#xff0c;伴随着激昂的音乐&#xff0c;活力四射的青春舞…

华为OD机试真题——通过软盘拷贝文件(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《通过…

一起学数据结构和算法(二)| 数组(线性结构)

数组&#xff08;Array&#xff09; 数组是最基础的数据结构&#xff0c;在内存中连续存储&#xff0c;支持随机访问。适用于需要频繁按索引访问元素的场景。 简介 数组是一种线性结构&#xff0c;将相同类型的元素存储在连续的内存空间中。每个元素通过其索引值&#xff08;数…

ZYNQ sdk lwip配置UDP组播收发数据

🚀 一、颠覆认知:组播 vs 单播 vs 广播 通信方式目标设备网络负载典型应用场景单播1对1O(n)SSH远程登录广播1对全网O(1)ARP地址解析组播1对N组O(1)视频会议/物联网群控创新价值:在智能工厂中,ZYNQ通过组播同时控制100台AGV小车,比传统单播方案降低92%网络流量! 🔧 二、…

机器学习:欠拟合、过拟合、正则化

本文目录&#xff1a; 一、欠拟合二、过拟合三、拟合问题原因及解决办法四、正则化&#xff1a;尽量减少高次幂特征的影响&#xff08;一&#xff09;L1正则化&#xff08;二&#xff09;L2正则化&#xff08;三&#xff09;L1正则化与L2正则化的对比 五、正好拟合代码&#xf…

Linux命令之ausearch命令

一、命令简介 ausearch 是 Linux 审计系统 (auditd) 中的一个实用工具,用于搜索审计日志中的事件。它是审计框架的重要组成部分,可以帮助系统管理员分析系统活动和安全事件。 二、使用示例 1、安装ausearch命令 Ubuntu系统安装ausearch命令,安装后启动服务。 root@testser…

mac电脑安装nvm

方案一、常规安装 下载安装脚本&#xff1a;在终端中执行以下命令来下载并运行 NVM 的安装脚本3&#xff1a; bash curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.39.5/install.sh | bash配置环境变量&#xff1a;安装完成后&#xff0c;需要配置环境变量。如…

Excel 操作 转图片,转pdf等

方式一 spire.xls.free&#xff08;没找设置分辨率的方法&#xff09; macOs开发Java GUI程序提示缺少字体问题解决 Spire.XLS&#xff1a;一款Excel处理神器_spire.xls免费版和收费版的区别-CSDN博客 官方文档 Spire.XLS for Java 中文教程 <dependency><groupI…

oracle goldengate实现远程抽取postgresql 到 postgresql的实时同步【绝对无坑版,亲测流程验证】

oracle goldengate实现postgresql 到 postgresql的实时同步 源端&#xff1a;postgresql1 -> postgresql2 流复制主备同步 目标端&#xff1a;postgresql 数据库版本&#xff1a;postgresql 12.14 ogg版本&#xff1a;21.3 架构图&#xff1a; 数据库安装以及流复制主备…