news 2026/8/19 3:16:35

RFID与触摸屏控制器集成:嵌入式物联网终端开发全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RFID与触摸屏控制器集成:嵌入式物联网终端开发全解析

1. 项目概述:当RFID遇上触摸屏,一个控制器的进化

在嵌入式开发和物联网硬件集成的圈子里,我们常常会遇到一个经典场景:需要一个设备来识别物体或人员,并提供一个直观的界面进行交互或配置。传统的方案可能是“RFID读卡器+独立按键+数码管”,或者更复杂点,“RFID读卡器+外接电脑”。但今天要聊的这个组合——“带触摸屏控制器的RFID读卡器”——则代表了一种更集成、更现代、也更符合人机交互直觉的解决方案。它不仅仅是两个硬件的简单叠加,而是一个经过深思熟虑的系统性设计,旨在解决特定场景下的核心痛点。

简单来说,这个项目就是将一个RFID读卡模块与一个触摸屏控制器深度整合,形成一个一体化的智能终端。RFID负责非接触式的数据采集(比如识别一张卡片、一个标签),而触摸屏则承担了所有的人机交互任务:显示信息、菜单导航、参数设置、数据查询,甚至直接触发控制指令。它的核心价值在于将“识别”与“控制”无缝衔接在一个紧凑的物理单元内,极大地简化了系统布线,提升了终端用户的交互体验,并增强了设备的独立运行能力。

它适合谁呢?如果你是嵌入式开发者、物联网硬件工程师、自动化设备集成商,或者正在为一个需要身份验证+交互的终端(如智能门禁、仓储管理终端、自助服务机、生产工位操作台)寻找方案,那么这个话题就是为你准备的。接下来,我会从一个实际构建者的角度,拆解这个项目的设计思路、技术选型、实操细节以及那些只有踩过坑才知道的经验。

2. 核心需求与方案选型背后的逻辑

为什么是“RFID + 触摸屏控制器”,而不是其他组合?这背后是对应用场景的深度理解和技术路径的权衡。

2.1 核心需求场景拆解

首先,我们得明确什么样的场景需要这样的设备。想象以下几个画面:

  1. 智能仓储拣选台:工人刷员工卡(RFID)登录系统,触摸屏立刻显示其今天的拣货任务清单。他点击屏幕上的商品项,确认完成,系统记录操作人与时间。这里,RFID实现了快速、无感的身份绑定,触摸屏提供了丰富的任务信息展示和确认操作。
  2. 设备参数调试终端:维护工程师持有一张高级权限卡,在设备外壳的读卡区一晃,触摸屏从普通的运行状态界面切换进入高级设置菜单,工程师可以直接在屏上修改电机转速、温度阈值等参数。RFID在这里充当了物理密钥,实现了界面权限的动态切换。
  3. 小型自助租赁柜:用户刷会员卡或手机(模拟卡)开柜,触摸屏显示租赁协议和物品列表,用户点击选择物品并确认,柜门打开。整个过程无需物理按键,交互引导清晰。

这些场景的共同点是:都需要在识别身份或物体的瞬间,提供与之相关的、动态的、可交互的视觉反馈和操作入口。传统的按键+LED方案信息量有限,外接电脑又笨重且成本高。一体化的触摸屏RFID终端完美契合。

2.2 为什么选择“触摸屏控制器”而非“MCU+触摸屏”?

这是一个关键的技术选型点。市面上常见的有两种路径:

  • 路径A:选用一款高性能的MCU(如STM32系列),直接驱动RFID读卡芯片(如通过SPI接口)和触摸屏(可能是RGB接口的LCD,带触摸IC)。MCU需要同时处理读卡逻辑、屏显驱动、触摸检测、UI绘制和应用业务逻辑。
  • 路径B:选用一款触摸屏控制器。注意,这里的“控制器”通常指集成了显示驱动、触摸控制、甚至运行着轻型操作系统(如Linux)的SOC模块,例如基于全志、瑞芯微等芯片的核心板。RFID读卡模块作为外设,通过UART或SPI连接到这个控制器上。

我们的项目选择了路径B。理由如下:

  1. 开发效率与UI表现力:触摸屏控制器通常自带成熟的图形库(如QT、LVGL)或甚至完整的操作系统,开发复杂的用户界面(多级菜单、动画、图片显示)比在裸机MCU上从头构建要高效得多。UI的美观度和流畅度也更有保障。
  2. 处理能力与扩展性:控制器SOC的主频和资源远高于普通工控MCU,不仅能轻松处理UI和读卡,还能预留能力用于网络通信(4G/Wi-Fi)、数据存储、音视频播放等未来可能扩展的功能。
  3. 分工明确,降低耦合:RFID模块专心负责射频识别,将读到的卡号通过串口上报。触摸屏控制器专心负责人机交互和业务逻辑。两者通过清晰的串口协议通信,任何一方的升级或更换都相对独立,系统更健壮。
  4. 规避实时性陷阱:在路径A中,如果UI绘制复杂,可能会阻塞对RFID读卡中断的及时响应,导致漏读。在路径B中,操作系统可以进行任务调度,读卡数据接收和UI刷新可以放在不同的线程中,互不干扰。

注意:这里的“触摸屏控制器”不是指触摸屏本身的那颗触摸IC(如GT911),而是指驱动整个屏幕并运行主程序的“大脑”单元。在采购时,它常被称为“串口屏”、“智能屏”或“HMI核心板”。

3. 硬件架构设计与核心器件选型要点

确定了方案方向,接下来就是搭积木。一个可靠的硬件设计是项目成功的基石。

3.1 核心器件选型深度解析

1. RFID读卡模块选型:

  • 频率决定一切:常见的有低频(125kHz)、高频(13.56MHz)和超高频(860-960MHz)。13.56MHz(高频)是目前最主流的选择,支持ISO14443A/B协议(M1卡、CPU卡),读写距离通常在5-10cm,性价比高,卡片种类丰富。我们的项目以门禁、工位操作为例,选择高频模块。
  • 芯片与协议:优先选择集成度高、口碑好的芯片方案,如NXP的RC522、PN512、PN5180。RC522最经典但功能较基础;PN512支持更多协议;PN5180性能更强,支持更远距离和更快的读写。对于大多数应用,RC522或国产兼容芯片已足够。
  • 接口形式:模块通常提供UART(TTL电平)、SPI、I2C接口。为了与触摸屏控制器方便连接,强烈推荐选择UART接口的模块。它接线简单(RX、TX、GND、VCC),通信协议直观,任何带串口的控制器都能轻松对接。
  • 天线集成:选择将天线与读卡芯片集成在同一块小板上的模块,可以极大简化硬件设计,避免自己调试天线匹配电路的麻烦。确保模块外壳有明确的读卡区域指示。

2. 触摸屏控制器选型:

  • 显示与触摸参数:根据你的应用决定屏幕尺寸(常见4.3寸、5寸、7寸)和分辨率(800x480, 1024x600)。电阻屏成本低、抗干扰强但只能单点触控;电容屏体验好、支持多点触控,已成为主流。选择时注意控制器的接口要匹配屏幕(通常为RGB、LVDS或MIPI接口)。
  • 控制器核心:这是选型的重中之重。市场上有两大类:
    • 封闭式串口屏:厂家提供了固化的图形指令集,你通过单片机发送特定指令来控制屏幕显示。优点是开发简单,但UI灵活性和功能受限。
    • 开放式核心板:例如基于全志F1C100s、V3s,或瑞芯微RK3308等的核心板。它允许你刷入自己的Linux系统,使用QT或LVGL进行自由开发。这是我们项目推荐的方案,因为它提供了最大的灵活性和控制力。
  • 外设接口需求:确认控制器必须有至少一个可用的UART串口用于连接RFID模块。此外,根据未来扩展,可能需要USB(接摄像头、4G模块)、以太网、GPIO等。
  • 供电与稳定性:注意控制器和屏幕的供电电压(通常是5V或3.3V)和功耗。工业环境需考虑宽温设计、防静电等。

3. 电源设计:

  • 统一供电:建议采用一个5V/2A以上的直流电源适配器,同时给触摸屏控制器和RFID模块供电。RFID模块工作电流很小(约100mA),主要功耗在屏幕和控制器上。
  • 电平匹配:确保控制器与RFID模块的通信电平一致。大多数UART RFID模块和控制器核心板都是3.3V TTL电平,直接连接即可。如果是5V电平的模块,需要加电平转换电路。
  • 抗干扰与滤波:在电源入口处增加磁珠和滤波电容,尤其是RFID模块的电源引脚附近,加一个100uF的电解电容并联一个0.1uF的陶瓷电容,可以有效抑制电源噪声,这对射频电路的稳定性至关重要。

3.2 系统连接与通信协议设计

硬件连接非常简单:

  1. 电源正极(5V)并联接入控制器和RFID模块的VCC。
  2. 电源地(GND)并联接入两者的GND。
  3. 控制器的UART_TX引脚接RFID模块的RX。
  4. 控制器的UART_RX引脚接RFID模块的TX。

通信协议是软件交互的基石。RFID模块的上电初始化、寻卡、读卡等操作,都需要通过串口发送特定的命令帧。不同厂家的模块指令集可能不同,但通常遵循一个简单的格式:[帧头][命令字][数据长度][数据域][校验和][帧尾]

例如,一个典型的“寻卡”指令可能如下(十六进制):

AA BB 01 00 01 CC 33 C3 3C
  • AA BB:帧头
  • 01:命令字,代表寻卡
  • 00 01:数据长度(可能为1字节,表示寻卡模式)
  • CC:数据(具体模式)
  • 33 C3 3C:校验和与帧尾(示例)

模块寻到卡后,会返回一帧数据,其中包含卡的UID(唯一标识符),例如:

AA BB 81 04 01 02 03 04 XX YY ZZ
  • 81:响应命令字(0x80 | 0x01)
  • 04:数据长度
  • 01 02 03 04:4字节的卡UID
  • XX YY ZZ:校验部分。

实操心得:在编写控制器端的串口驱动时,一定要实现一个严谨的帧解析状态机。串口数据是流式的,可能被拆分成多个包到达。状态机需要能正确识别帧头、计算长度、接收完整数据、验证校验和,才能确保每一张卡的数据都被准确无误地解析出来。这是稳定性的关键。

4. 软件架构与核心功能实现

硬件搭好,重头戏在软件。我们的软件运行在触摸屏控制器的Linux系统上。

4.1 开发环境搭建与系统构建

  1. 选择Linux发行版:对于资源相对紧张的核心板(如256MB内存),Buildroot是构建轻量级根文件系统的首选。对于功能需求复杂的,可以选择Yocto或直接使用厂家提供的Debian镜像。
  2. 交叉编译工具链:从芯片厂商或社区获取对应的交叉编译工具链(如arm-linux-gnueabihf-)。这是在你强大的开发机(通常是x86电脑)上编译出能在ARM板子上运行的程序的关键。
  3. 图形框架选择
    • QT:功能强大、生态成熟,适合需要复杂桌面级UI、多媒体播放、网络通信的应用。但运行时库较大,对硬件资源要求较高。
    • LVGL:轻量级、开源、高度可裁剪的嵌入式图形库。用C语言编写,性能高,内存占用小,非常适合我们的项目。它提供了丰富的控件(按钮、标签、列表、图表)和动画效果,完全能满足工业触摸屏UI的需求。本项目推荐使用LVGL
  4. 构建系统:使用CMake来管理你的项目,它可以方便地配置交叉编译,管理LVGL库的依赖。

4.2 多线程软件架构设计

一个健壮的软件需要良好的架构来管理并发任务。建议采用以下多线程模型:

  • 主线程(UI线程):专门负责运行LVGL的主循环,处理所有触摸事件、控件刷新和动画。LVGL不是线程安全的,所有对LVGL对象的操作都必须在这个线程内进行。
  • 串口通信线程:创建一个独立的线程,专门负责通过串口与RFID模块通信。它持续读取串口数据,通过状态机解析出完整的卡号数据包。
  • 业务逻辑线程:当串口线程解析到一张有效的卡号后,它不应该直接操作UI,而是通过线程间通信机制(如消息队列、管道、甚至简单的全局变量加锁)将卡号数据“发送”给业务逻辑线程。业务逻辑线程根据卡号查询数据库(可能是本地SQLite或内存中的列表)、判断权限、决定下一步动作(如显示欢迎信息、跳转界面、发送网络请求)。
  • 业务逻辑线程与UI线程的交互:业务逻辑线程确定了要在屏幕上显示什么内容后,也不能直接调用LVGL的API。它需要通过LVGL提供的线程安全接口(如lv_tasklv_timer)或自定义的事件机制,向UI线程“投递”一个更新UI的任务。

这种架构清晰地将设备驱动(串口)业务处理用户界面解耦,避免了因为某个环节的阻塞(比如网络查询慢)导致整个界面卡死或读卡不灵敏。

4.3 核心功能代码实现片段

以下以LVGL和Linux串口编程为例,展示关键环节的代码思路。

1. 串口线程实现(伪代码风格):

void *uart_thread_func(void *arg) { int fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY); // 打开串口设备 // ... 配置串口波特率115200,8N1,原始模式 ... uint8_t rx_buffer[256]; int state = STATE_WAIT_HEADER; int data_len = 0; int data_index = 0; while (running) { int n = read(fd, rx_buffer, sizeof(rx_buffer)); for (int i = 0; i < n; i++) { uint8_t byte = rx_buffer[i]; switch (state) { case STATE_WAIT_HEADER: if (byte == 0xAA) state = STATE_HEADER1; break; case STATE_HEADER1: if (byte == 0xBB) state = STATE_CMD; else state = STATE_WAIT_HEADER; break; case STATE_CMD: // 解析命令字... state = STATE_LEN_HIGH; break; case STATE_LEN_HIGH: data_len = byte << 8; state = STATE_LEN_LOW; break; case STATE_LEN_LOW: data_len |= byte; if (data_len > MAX_DATA_LEN) { state = STATE_WAIT_HEADER; break; } data_index = 0; state = (data_len > 0) ? STATE_DATA : STATE_CHECKSUM; break; case STATE_DATA: packet.data[data_index++] = byte; if (data_index >= data_len) state = STATE_CHECKSUM; break; case STATE_CHECKSUM: // 计算并验证校验和 if (checksum_ok) { // 解析出卡号 card_id uint32_t card_id = ...; // 将card_id放入消息队列,通知业务线程 message_queue_push(card_id); } state = STATE_WAIT_HEADER; // 重置状态机,准备解析下一帧 break; } } } close(fd); return NULL; }

2. UI线程中响应读卡事件:在LVGL的主循环中,我们需要定期检查是否有新的卡号需要处理。可以通过一个定时器任务来实现。

static void my_timer_cb(lv_timer_t * timer) { uint32_t card_id; if (message_queue_try_pop(&card_id)) { // 非阻塞地从队列取数据 // 在UI线程中安全地更新界面 lv_label_set_text_fmt(ui_label_welcome, "Card: %08X", card_id); // 根据卡号执行UI跳转等操作 lv_scr_load(ui_screen_main); // 切换到主界面 } } // 在初始化时创建定时器 lv_timer_create(my_timer_cb, 100, NULL); // 每100ms检查一次

3. 界面设计与交互逻辑:使用LVGL的图形化设计器(如SquareLine Studio)可以快速拖拽出界面。然后导出C代码,与你的业务逻辑结合。典型的界面可能包括:

  • 待机界面:显示公司Logo、时间日期。
  • 主操作界面:刷卡后显示,包含操作按钮(如“查询库存”、“上报异常”)、信息显示区域。
  • 设置界面:通过输入密码或刷管理员卡进入,用于添加/删除卡号权限、设置网络参数等。

5. 系统集成、调试与性能优化

当硬件焊接完毕,软件编译烧录后,真正的挑战才刚刚开始——让整个系统稳定可靠地跑起来。

5.1 上电与联合调试流程

  1. 分模块调试

    • 先调屏:确保控制器能正常启动Linux,LVGL示例程序能在屏幕上跑起来,触摸校准准确。
    • 再调RFID:将RFID模块通过USB转TTL工具连接到电脑,使用串口助手(如Putty、SecureCRT)发送厂家提供的测试指令,确认模块能正确寻卡并返回数据。记录下正确的指令序列和响应格式。
    • 最后联调:将RFID模块接到控制器的串口上,在控制器中编写一个最简单的串口测试程序,循环发送寻卡指令并打印接收到的数据到屏幕或日志,确保物理连接和电气逻辑正确。
  2. 通信稳定性测试

    • 连续快速刷卡上百次,观察是否有漏读或错读。如果出现,检查:
      • 串口波特率是否精确匹配(使用示波器测量)。
      • 电源是否在刷卡瞬间有跌落(用示波器探头看VCC波形)。
      • 软件状态机逻辑是否有边界条件未处理。
    • 在设备附近开关大功率电器(如电钻、电机),测试射频和电源的抗干扰能力。

5.2 关键性能优化点

  1. 读卡响应速度

    • 硬件:确保RFID模块天线周围没有大面积金属,金属会严重干扰磁场,降低读卡距离和速度。可以尝试微调天线匹配电路上的电容(如果模块允许)。
    • 软件:优化寻卡策略。不要一直以最高频率发送寻卡指令,这会导致模块发热和功耗增加。可以采用“轮询间隔+触发式”结合的方式:平时以较低频率(如每秒5次)轮询;一旦检测到有卡接近(可通过场强变化初步判断),再切换到高频模式连续寻卡,直到卡离开。
  2. UI流畅度

    • LVGL优化:启用LVGL的双缓冲(LV_VDB_SIZE),将绘图操作放在后台缓冲区,然后一次性刷新到屏幕,避免闪烁。合理使用lv_obj_invalidate()来标记需要重绘的区域,而不是刷新整个屏幕。
    • 图片资源:将图片转换为C数组或二进制文件,并使用LVGL的图片缓存功能。避免使用过大的位图。
    • 动画与定时器:减少同时进行的复杂动画数量。定时器的回调函数执行时间要短。
  3. 功耗与散热

    • 在待机时,可以通过软件关闭屏幕背光(调低PWM或直接控制GPIO)。
    • 如果控制器支持,可以动态调整CPU频率。在无触摸操作、无读卡事件时,进入低功耗模式。
    • 确保设备外壳有合理的散热孔,尤其是控制器核心板位置。

6. 常见问题排查与实战经验录

以下是我在多个类似项目中踩过的坑和总结的解决方法,希望能帮你少走弯路。

问题现象可能原因排查步骤与解决方案
完全读不到卡1. 电源问题
2. 串口连接错误
3. 模块未初始化
1. 用万用表测量模块VCC和GND间电压是否为额定值(如5V)。
2. 检查TX/RX是否交叉连接。用逻辑分析仪或另一个USB转TTL工具监听控制器发出的指令,看是否正确。
3. 参考模块手册,上电后可能需要发送特定的初始化指令(如设置波特率、射频场强)才能进入寻卡模式。
读卡距离非常近或不稳定1. 天线匹配不良
2. 环境干扰
3. 电源噪声
1. 这是最常见原因。检查天线线圈是否完好,有无短路/断路。使用网络分析仪调试天线匹配电路至谐振频率13.56MHz。若无仪器,可尝试微调匹配电容值(通常并联在天线两端)。
2. 远离金属物体、大功率电源、变频器。
3. 在模块电源引脚就近增加大容量(如100uF)电解电容和0.1uF陶瓷电容滤波。
触摸屏点击不准确或漂移1. 触摸屏未校准
2. 地线干扰
3. 触摸IC驱动问题
1. 运行系统的触摸校准程序。电容屏校准一次后通常能长期保持。
2. 确保触摸屏的屏蔽层和控制器主板的地良好连接。
3. 检查Linux内核中触摸IC(如GT911、FT5x06)的驱动是否正确加载,I2C地址配置是否正确。查看dmesg日志。
系统运行一段时间后死机1. 内存泄漏
2. 散热不良
3. 电源波动
1. 使用free命令监控内存使用情况。检查代码中malloc/free或LVGL对象创建/删除是否成对出现。
2. 触摸控制器芯片温度,如果烫手,需加强散热或优化软件降低CPU负载。
3. 用示波器长时间监测电源电压,看是否有异常毛刺或跌落。
串口收到乱码或数据帧不完整1. 波特率误差
2. 缓冲区溢出
3. 中断与线程冲突
1. 确保控制器和RFID模块的波特率、数据位、停止位、校验位设置完全一致。晶振精度不够会导致误差累积。
2. 增大串口接收缓冲区,并确保读线程能及时读取数据。
3. 避免在串口中断服务程序(ISR)或信号处理函数中进行复杂操作或调用不可重入函数。

几条宝贵的实操心得:

  1. 静电是隐形杀手:在焊接和调试RFID模块天线部分时,务必佩戴防静电手环。一个不经意的静电放电就可能击穿敏感的射频芯片。
  2. 串口日志是你的眼睛:在软件中为关键流程(如收到卡号、界面切换、错误发生)添加详细的日志输出(通过串口打印到调试终端)。这是定位线上问题最直接的手段。
  3. 压力测试是试金石:在产品化前,进行至少72小时的不间断循环测试:模拟每秒刷卡1-2次,随机触摸屏幕。这能暴露出内存泄漏、线程死锁、硬件温升等隐藏问题。
  4. 预留调试接口:在最终外壳上,可以考虑隐藏一个Micro-USB接口,连接到控制器的调试串口。这样在现场维护时,无需拆机就能查看系统日志,极大提升维护效率。
  5. 考虑“离线”与“在线”模式:对于网络可能不稳定的环境(如工厂车间),设计业务逻辑时,要支持离线工作。刷卡记录可以先缓存在本地SD卡或Flash中,待网络恢复后再同步到服务器。这能显著提升设备的可用性。

从最初的概念设计到最终稳定运行的产品,构建一个“带触摸屏控制器的RFID读卡器”是一次充满挑战但也收获满满的旅程。它要求你横跨硬件、底层驱动、操作系统、应用软件等多个领域。当看到自己打造的设备,在用户“嘀”一声刷卡后,屏幕亮起并流畅地展示出相关信息时,那种成就感是对所有付出的最好回报。这个项目不仅是一个具体的产品,更是一个理解嵌入式系统全栈开发的绝佳范例。希望这份详细的拆解,能为你点亮思路,助你打造出更出色的产品。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 3:15:12

大模型API安全:加密思维链旁路攻击原理与防御实践

这次我们来看一个近期在AI安全领域引发关注的技术话题&#xff1a;“三大模型加密思维链被旁路转录”。这并非一个具体的开源项目&#xff0c;而是一项揭示大型语言模型&#xff08;LLM&#xff09;潜在安全风险的研究发现。简单来说&#xff0c;研究人员发现&#xff0c;即使模…

作者头像 李华
网站建设 2026/8/19 3:10:46

从澳洋顺昌9.1亿定增看LED产业升级:技术、资本与产业链协同

1. 从一则公告看LED产业的“定增”逻辑最近&#xff0c;LED行业里一则公告引起了我的注意&#xff1a;澳洋顺昌的定增方案获得了批准&#xff0c;涉及金额高达9.1亿元。对于不熟悉资本市场的朋友来说&#xff0c;“定增”这个词可能有点陌生&#xff0c;但它在实体产业&#xf…

作者头像 李华
网站建设 2026/8/19 3:10:34

基于LLM的对话式表单助手:为低数字素养人群设计的语音交互系统

1. 项目概述&#xff1a;为印度农村设计的对话式填表助手 在印度广袤的农村地区&#xff0c;数字鸿沟依然是一个严峻的现实。对于许多受教育程度有限、不熟悉标准英语或印地语、甚至不习惯使用触摸屏的居民来说&#xff0c;完成一份看似简单的在线或纸质表格&#xff0c;都可能…

作者头像 李华
网站建设 2026/8/19 3:08:41

步进电机编码器闭环控制:从硬件连接到PID算法实现

1. 项目概述&#xff1a;当步进电机遇上编码器在自动化设备和精密控制领域&#xff0c;步进电机因其开环控制、定位精准的特性而广受欢迎。但它的一个经典痛点也随之而来&#xff1a;一旦负载突变或遇到阻力导致失步&#xff0c;整个系统就“失明”了&#xff0c;位置和速度的准…

作者头像 李华
网站建设 2026/8/19 3:08:26

nRF Connect SDK配置文件全解析:Kconfig、CMake与设备树实战指南

1. 从零开始&#xff1a;理解nRF Connect SDK应用程序的“骨架”如果你刚开始接触nRF Connect SDK&#xff08;NCS&#xff09;&#xff0c;面对一个全新的项目&#xff0c;可能会感到有些无从下手。我们创建了一个简单的“Hello World”应用&#xff0c;用west build命令编译&…

作者头像 李华