RIOT 示例程序全景指南:从 Hello World 到网络栈、语言绑定与高级特性的实践入口 📅 发布时间:2026/9/20 5:26:56 👁 浏览次数: RIOT 示例程序全景指南从 Hello World 到网络栈、语言绑定与高级特性的实践入口【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT导读本文以 examples/README.md 为核心骨架系统梳理 RIOT 操作系统官方提供的全部示例程序从最基础的 hello-world、blinky 等入门应用到 SAUL 传感器抽象、IPC 消息传递、文件系统等核心模块演示再到 CoAP、BLE、MQTT、LoRaWAN、DTLS、DTN 等完整的网络协议栈示例以及 Rust/C/JavaScript/Lua/MicroPython/WebAssembly 等多语言绑定和 SUIT 固件升级、USB、POSIX select 等高级特性。读完本文你将掌握每个示例的定位、所在路径、构建运行方法与适用场景能够快速定位并复用最适合自己项目的示例作为开发起点。RIOT 的每个示例都自带一份README.md提供完整的说明与运行指引本文在此基础上结合仓库源码深入讲解各示例背后的实现原理与可配置项。示例总览RIOT 示例库的组织方式RIOT 的示例分布在examples/目录下按主题分为五大类分类目录定位基础示例examples/basic展示 OS 核心能力GPIO、定时器、IPC、SAUL、文件系统、构建系统语言绑定examples/lang_support用 Rust / C / JavaScript / Lua / MicroPython / WebAssembly / Arduino 编写 RIOT 应用网络示例examples/networkingCoAP、BLE、MQTT、GNRC、LoRaWAN、DTLS、DTN、lwIP 等网络协议栈高级示例examples/advancedUSB、SUIT 固件升级、POSIX select、PSA Crypto、XiPFS、线程调度等进阶主题指南配套示例examples/guides官方教程creating_project、shell、gpio、saul、threads、timers、event_queue产出的完整代码每个示例目录通常由Makefile构建配置、main.c应用源码、README.md说明文档组成部分示例还带有Makefile.board.dep板级依赖和Makefile.ciCI 测试配置。例如 examples/basic/hello-world 仅三个文件即可构成一个完整可运行的应用。The Essentials入门必备的基础示例hello-world理解 RIOT 应用的最小结构examples/basic/hello-world/README.md 明确指出这个示例的核心目的不是打印字符串而是演示 RIOT 的 Makefile 构建系统。对照其 Makefile 可以掌握 RIOT 应用构建的四大要点应用命名APPLICATION hello-world定义应用名通常与所在目录同名默认板卡BOARD ? native定义默认目标板卡可通过make BOARDmsba2在命令行覆盖RIOT 根目录RIOTBASE ? $(CURDIR)/../../..指向 RIOT 检出目录当应用位于 RIOT 子目录时可直接用$(CURDIR)构建入口Makefile 最后一行必须为include $(RIOTBASE)/Makefile.include。此外两个常用变量值得注意DEVELHELP ? 1启用开发期安全检查生产环境可注释关闭QUIET ? 1控制编译输出是否详细设为 0 可显示编译器调用命令。其 main.c 展示了 RIOT 提供的编译期板卡信息宏puts(Hello World!); printf(You are running RIOT on a(n) %s board.\n, RIOT_BOARD); printf(This board features a(n) %s CPU.\n, RIOT_CPU);RIOT_BOARD与RIOT_CPU由构建系统自动注入运行时即可输出当前板卡与 CPU 型号。blinky移植新板卡的第一个里程碑examples/basic/blinky/README.md 说明blinky 是嵌入式世界的 Hello World用于闪烁 LED若无 LED 或未配置则退化为通过 stdio 打印Blink!。它对于没有 stdio 的板卡尤其有价值——可用它验证新移植的 RIOT 是否工作。从源码 main.c 可以看到其巧妙设计延时函数在IS_USED(MODULE_ZTIMER)时使用ztimer_sleep(ZTIMER_USEC, 1 * US_PER_SEC)若板卡尚无定时器驱动新移植场景则退化为基于coreclk() / 20的忙等待循环并借助volatile防止编译器优化掉这个纯耗 CPU的循环。主循环通过#ifdef LED0_TOGGLE判断板卡是否定义了 LED 宏while (1) { delay(); #ifdef LED0_TOGGLE LED0_TOGGLE; #else puts(Blink! (No LED present or configured...)); #endif }正因如此blinky 仅依赖 GPIO 驱动对定时器驱动仅为可选依赖成为 RIOT 移植到新 MCU 时第一个应跑通的里程碑应用。default交互式体验板卡全部硬件examples/basic/default/README.md 将 default 示例定位为RIOT 硬件支持能力的展示台通过shell与shell_cmds_default模块把所有板卡支持的驱动模块以 shell 命令形式暴露出来还额外包含提供ps命令的ps模块。构建、烧录并启动export BOARDyour_board make make flash make termmake term会启动终端模拟器连接板卡串口默认端口通常是/dev/ttyUSB0可用PORT/dev/yourport覆盖。其 README 提供了在 iotlab-m3 上的真实输出help命令列出reboot、ps、isl29020_init/read、lps331ap_init/read、ifconfig、txtsnd等命令ps命令显示线程的 pid、名称、状态、优先级、栈使用量如idle线程 256 字节栈、main线程 1536 字节栈。网络配置方面ifconfig可查看/配置全部网络接口如ifconfig 4 set chan 12设置射频信道txtsnd可通过链路层以单播或广播发送字符串接收到的报文会以PKTDUMP形式自动打印 snip 结构、RSSI、LQI 与源/目的链路层地址。default 示例因此非常适合评估一块新板卡已支持哪些硬件与外设。leds_shell通过 shell 交互控制 GPIOexamples/basic/leds_shell 允许通过交互式 shell 轻松控制板载 LED 与基础 GPIO可驱动外接的简单设备额外 LED、继电器、电机等复杂设备则需专用驱动。它是学习 RIOTgpioAPI 与 shell 命令注册机制的轻量入口。saul传感器与执行器的统一抽象examples/basic/saul 演示SAULSensor Actuator Uber Layer及 SAUL registry 的用法。构建烧录后在 shell 中通过saul命令交互saul - 列出 SAUL registry 中映射的全部设备 saul read 0 - 读取设备 #0 的值 saul write 1 0 - 向 SAUL 设备 #1 写入 0SAUL 的价值在于把不同厂商、不同接口的传感器/执行器统一成一致的读写接口上层应用包括 senml_saul 这类结合 SenML 格式的示例可以完全屏蔽底层差异。timer_periodic_wakeup周期唤醒定时器examples/basic/timer_periodic_wakeup/README.md 演示如何利用 RIOT 设置周期唤醒定时器应用建立定时器后周期性唤醒系统并执行特定任务非常适合传感器周期采样、周期数据上报等场景。运行后串口会周期性打印定时器触发、系统唤醒执行任务的提示信息。ipc_pingpong线程间消息传递examples/basic/ipc_pingpong/README.md 演示 RIOT 的IPC 消息系统主线程调用thread_send_receive()进入无限循环第二个线程接收消息后打印2nd: Got msg from x并回送递增编号的回复消息。其标准输出序列展示了两个线程间的乒乓交互Starting IPC Ping-pong example... 1st thread started, pid: 1 2nd thread started, pid: 2 2nd: Got msg from 1 1st: Got msg with content 2 2nd: Got msg from 1 1st: Got msg with content 3 [...]这是理解 RIOT 线程模型与msg/mbox内核机制见 core/msg.c、core/mbox.c最直观的入门代码。filesystem文件系统管理与交互examples/basic/filesystem 展示在 RIOT 中交互与管理文件系统的方式可配合mtd内存技术设备与vfs虚拟文件系统相关模块了解 RIOT 对 LittleFS、SPIFFS、FATFS 等文件系统的统一接入模型对应 pkg/littlefs2、pkg/spiffs、pkg/fatfs。subfolders应用多目录组织examples/basic/subfolders 演示 RIOT 应用中如何使用子文件夹组织源码。其目录结构包含folder/subfolder/的多级源码目录以及external_modules/module/这种外部模块组织形式带独立 Makefile 的a.c/b.c并附带自动化测试脚本 tests/01-run.py是中型项目组织代码的参考样板。RIOT Language Bindings多语言应用开发官方支持Rust 与 CRIOT 官方定位并维护三类 Rust 示例位于 examples/lang_support/official示例内容rust-hello-world用 Rust 编写最简单的 RIOT 应用rust-gcoap用 Rust 基于gcoap模块编写 CoAP 服务器rust-async在 RIOT 应用中使用 Rust 的 async/await 语法Rust 支持通过构建系统与 cargo 集成实现参见 makefiles/cargo-targets.inc.mk。C 方面riot_and_cpp 展示在 RIOT 应用中使用 C含 C 异常支持等细节参见 CODING_CONVENTIONS_C.md。社区支持JavaScript、Lua、MicroPython、WebAssembly、Arduino示例运行时/绑定说明javascriptJerryScript用 JavaScript 编写 IoT 应用lua_basicLua用 Lua 编写 IoT 应用lua_REPLLua在 RIOT 中使用 Lua REPL读-求值-打印循环micropythonMicroPython使用 RIOT 的 MicroPython 移植wasmWebAssembly在 RIOT 中使用 WebAssembly相关 pkg 见 pkg/wamrarduino_hello-worldArduino在 RIOT 中运行 Arduino sketch相关 pkg 见 pkg/arduino_api这些示例展示了 RIOT friendly 的一面嵌入式开发者不必拘泥于 C可以选择自己熟悉的语言生态。Networking覆盖主流物联网协议栈的网络示例CoAPgcoap 与 nanocoapCoAP受约束应用协议是 IoT 的核心应用层协议RIOT 提供gcoap与nanocoap两个层次的 API示例说明gcoap基于gcoap模块的 CoAP 消息高层 API 示例gcoap_block_server使用 nanocoap 分块处理函数构建的 CoAP Block 请求服务器gcoap_fileserver用gcoap通过 CoAP 提供文件服务gcoap_dtls将gcoap与 DTLS 结合安全 CoAPnanocoap_server基于nanocoap模块的 CoAP 服务器libcoap_client使用libcoap提供 CoAP 客户端libcoap_server使用libcoap提供 CoAP 服务器gcoap是构建在nanocoap之上的高层 API若需完整 CoAP 实现如更多选项支持则可通过 pkg/libcoap 集成 libcoap。这三个层次nanocoap → gcoap → libcoap可满足从最小资源占用到功能完备的不同需求。BLENimBLE 栈与 iBeacon/EddystoneNimBLEApache 开源 BLE 协议栈系列示例位于 examples/networking/ble/nimble示例说明nimble_scanner将 NimBLE 用作扫描器nimble_gatt配置并运行简单 GATT 服务器nimble_heart_rate_sensor通过 GATT 通知实现异步数据传输模拟心率传感器Misc BLE 系列examples/networking/ble/misc则基于Skald广播库创建 BLE 信标skald_eddystone 创建 Google Eddystone 信标skald_ibeacon 创建 Apple iBeacon非常适合室内定位与信标广播场景。MQTT / MQTT-SN示例协议说明asymcute_mqttsnMQTT-SN使用 Asymcute 模块emcute_mqttsnMQTT-SN使用 emCute 模块面向低功耗无线传感器网络的经典选择paho-mqttMQTT使用 Paho MQTT 客户端库对应 pkg/paho-mqttMQTT-SN面向传感器网络的 MQTT 变体由 RIOT 原生模块 emCute/Asymcute 支持是 6LoWPAN/802.15.4 网络接入 MQTT 生态的常用路径。CoRE Resource Directory资源目录注册与查找示例说明cord_epRDResource Directory端点模块cord_epcord_lcRD 查找模块cord_lccord_epsim节点如何向 CoRE 资源目录注册这类示例解决大规模 CoAP 网络中的资源发现难题节点endpoint向资源目录注册自身资源其他节点通过查找模块发现可用资源。GNRCRIOT 原生网络栈GNRC 是 RIOT 自研的模块化网络栈覆盖 examples/networking/gnrc示例说明gnrc_minimal极简 GNRC 网络栈示例gnrc_networkingGNRC 网络栈综合用法gnrc_networking_subnets树形拓扑网络的 IPv6 子网自动配置gnrc_border_router自动配置的边界路由器gnrc_lorawanLoRaWAN 收发与基础命令其中gnrc_border_router是构建 6LoWPAN 接入互联网的关键组件常配合gnrc_networking在 IEEE 802.15.4 无线传感器网络上使用。DTLS传输层安全示例后端说明dtls-socksock API使用 DTLS sock 类型sock_dtls_tdtls-echoTinyDTLS将 TinyDTLS 与sock_udp结合dtls-wolfsslwolfSSL使用 wolfSSL 库实现 DTLS对应 pkg/wolfsslDTLS 为 UDP 提供与 TLS 等效的安全保障是 CoAP over UDP 场景如 gcoap_dtls的安全底座。DTNBPv7延迟容忍网络examples/networking/dtn 下的 bplib_cla_udp 与 bplib_cla_ble 演示使用 bplib对应 pkg/bplib分别通过单个 UDP 接触点与 BLE L2CAP CLA 构建 BPv7 延迟容忍网络适用于深空通信、灾后应急等链路间歇连通的场景。Misc其他网络能力examples/networking/misc 汇集了更多网络用例示例说明lorawan基础 LoRaWAN 用例openthreadOpenThread 协议栈对应 pkg/openthreadlwm2mLWM2M 客户端对应 pkg/wakaamaccn-lite-relay基于 CCN-Lite 的内容中心网络telnet_serverIPv6 上监听 23 端口的 telnet 服务器posix_socketsRIOT 的 POSIX socket 支持展示spectrum-scanner监测所有可用无线信道的能量水平sniffer配合./tools/sniffer.py抓取无线数据流量benchmark_udp用benchmark_udp模块对网络栈做压力测试sock_tcp_echo基于 SOCK API 的 TCP 回显服务器/客户端lwip_ipv4基于 lwIP 的 IPv4 UDP 客户端/服务器lwiperflwIP 基准测试应用提供 iPerf 客户端与服务器其中sniffer、spectrum-scanner是无线调试利器benchmark_udp、lwiperf用于网络性能评估。Advanced Examples高级特性与生产级能力示例说明bindist二进制分发将私有编译对象以可重新链接的方式随新编译的 RIOT 分发usbus_minimal极简 RIOT USB 栈示例suit_update在 RIOT 应用中集成 SUIT 标准固件更新配合 bootloaders/riotbootthread_duel借助可选的时间片轮转调度模块展示多线程并发能力posix_selectRIOT 的 POSIX select 支持展示psa_cryptoPSA Crypto API 基础功能pio_blink在树莓派 Pico 上用 PIO 外设闪烁 LEDtwr_aloha基于 uwb-core pkg 与 dw1000 的双向测距算法测试senml_saulSAUL 与 SenML传感器测量列表格式结合opendsmeOpenDSME 模块IEEE 802.15.4 确定性 MACxipfs_minimal_exampleXiPFS 最小用法创建并执行可执行文件xipfs_memory_image_example嵌入预制的板外 XiPFS 挂载点内存镜像xipfs_complete_example从代码使用多个 XiPFS 挂载点这些示例覆盖了从安全启动/固件更新SUIT、riotboot到文件系统XiPFS、加密PSA Crypto和生产交付bindist的完整进阶链路是从原型走向产品化的重要参考。Examples from Guides官方教程的配套代码examples/guides 中的每个示例都是官方教程guide.riot-os.org的配套产物采用教程 可运行代码的形式示例对应教程主题creating_project搭建 RIOT 项目、构建并运行 Hello Worldshell在应用中使用交互式 RIOT shellgpio配置并使用 GPIO 与外部硬件交互saul通过 SAUL 接口与传感器/执行器交互threads创建与管理多个执行线程timers使用定时器完成周期任务与时间测量event_queue使用事件队列对于初学者推荐按creating_project→shell→gpio→saul→threads→timers→event_queue的顺序依次完成每个阶段都有可直接构建运行的完整代码对照。如何开始选择示例、构建与运行所有示例的统一工作流为cd examples/分类/示例名 BOARD你的板卡 make flash termmake编译应用make flash烧录到板卡make term打开串口终端交互不指定BOARD时使用各示例 Makefile 中的默认板卡如 hello-world 默认native桌面调试可先用BOARDnative在本机直接运行native 是 RIOT 的模拟平台见 cpu/native需要查看所有可用板卡时可查阅 boards 目录下各板卡的 README。选型建议验证板卡硬件用default移植新 MCU 用blinky学习构建系统用hello-world做传感器项目从saul起步做无线传感器网络以gnrc_networkinggnrc_border_router为骨架需要设备接入云平台则组合emcute_mqttsn/paho-mqtt与gcoap。每个示例的 README 都给出了精确的运行说明与预期输出可直接作为项目模板复制演进。【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考