当前位置: 首页 > news >正文

[嵌入式]嵌入式在线仿真平台 —— Wokwi 入门指南

[嵌入式]嵌入式在线仿真平台 —— Wokwi 入门指南

对于想入门嵌入式或者远程办公没在公司的朋友来说,如果没有硬件,极大阻碍了开发,今天给大家分享一个在线网站,可以帮我们模拟硬件,辅助我们开发。

基本介绍

介绍:Wokwi 是一个在线的电子电路仿真平台,由 Uri Shaked 创建。它允许你在浏览器中直接模拟 ESP32、STM32、Arduino 等主流微控制器,并实时运行代码、观察电路行为。

官方平台: https://wokwi.com

功能类别具体支持
芯片/开发板ESP32(DevKit V1、S3、C3)、STM32(F103、NUCLEO系列)、Arduino(Uno、Nano、Mega)、Raspberry Pi Pico
外设与传感器LED、按键、OLED/LCD 显示屏、DHT22 温湿度、超声波测距、Wi-Fi 仿真、蓝牙(BLE)、GPS 模块等
编程框架Arduino (C++)、MicroPython / CircuitPython、ESP‑IDF、Rust
调试能力调试能力 串口监视器、虚拟逻辑分析仪、GDB 断点调试

在线使用:网站

1. 简单入门

  1. 打开浏览器,访问 https://wokwi.com
  2. 点击右上角头像,可直接使用 GitHub 账号 登录(推荐,方便保存项目)
  3. 点击 “New Project”,选择目标开发板(如 ESP32 或 STM32)

    面板介绍:
区域作用
左侧代码编辑器
左上方文件管理器(管理 diagram.json等项目文件)
右侧电路图可视化区(显示开发板、LED、传感器等元件的布局)
右下方Serial Monitor(串口监视器,查看 Serial.print 输出)
右上方▶️ 启动仿真、⏸️ 暂停、🔄 复位

注意:电路连接有两种方式:

  1. 通过编辑 diagram.json 文件实现,例如:
    [“led1:A”, “esp:2”, “green”] 表示 LED 正极接 ESP32 的 GPIO 2 引脚。
  2. 通过直接面板画线

2. 项目实战

不给大家讲复杂的操作,只教大家如何使用这个平台,因此这里就选择嵌入式世界中的"Hello World",即:点亮LED灯。

  • 底层原理:本质就是产生电势差,LED正极接芯片的引脚,并让该芯片引脚输出高电平,LED负极接GND(地),即0,这样就存在一个高低电平,有一个电势差,LED灯就会被点亮。
  • PS:Wokwi 仿真中 LED 可省略电阻,但实际制作电路时,务必在 LED 正极与 GPIO 之间串联 220Ω 限流电阻。否则电流过大会烧毁 LED 或芯片

实战项目:ESP32 点亮 LED

最后完整项目链接🔗:https://wokwi.com/projects/464431280903798785

  1. 新建项目,访问 https://wokwi.com/projects/new/esp32 。 创建之后默认会有开发板和初始化代码,点击运行,观察效果
  2. 编辑 diagram.json(电路连接)。可以通过直接改文件或者直接通过页面直接修改。下面我们演示页面直接修改
  • 点击加号,添加LED灯

  • 我们添加之后会发现diagram.json会同步修改
  1. 选中LED引脚,进行连线。我这里选择GPIO26作为正极,LED另一端直接接GND

官方文档:https://documentation.espressif.com/esp32-wroom-32e_esp32-wroom-32ue_datasheet_en.pdf

diagram.json:

{"version":1,"author":"Ziyi","editor":"wokwi","parts":[{"type":"board-esp32-devkit-c-v4","id":"esp","top":-163.2,"left":-71.96,"attrs":{}},{"type":"wokwi-led","id":"led1","top":-195.6,"left":-188.2,"attrs":{"color":"red"}}],"connections":[["esp:TX","$serialMonitor:RX","",[]],["esp:RX","$serialMonitor:TX","",[]],["led1:A","esp:26","green",["v0"]],["led1:C","esp:GND.1","green",["v0"]]],"dependencies":{}}
  1. 编写main.cpp
constintledPin=26;// LED 正极连接 GPIO26;负极直接接地voidsetup(){Serial.begin(115200);Serial.println("Hello, ESP32!");pinMode(ledPin,OUTPUT);// 设置 GPIO26 为输出模式}voidloop(){digitalWrite(ledPin,HIGH);// 高电平,点亮 LEDSerial.println("LED ON");delay(500);// 持续 500 毫秒digitalWrite(ledPin,LOW);// 低电平,熄灭 LEDSerial.println("LED OFF");delay(500);// 熄灭 500 毫秒}
  1. 启动仿真,点击顶部 ▶️ Start Simulation。可以看到LED灯闪烁

实战项目:STM32 点亮 LED

最后完整项目链接🔗:https://wokwi.com/projects/464439559624093697

  1. 新建项目,访问 https://wokwi.com/projects/new/st-nucleo-l031k6 ,新建一个stm32项目
  2. 编辑 diagram.json(电路图)
{"version":1,"author":"Ziyi","editor":"wokwi","parts":[{"type":"board-st-nucleo-l031k6","id":"nucleo","top":-46.79,"left":-34.85,"attrs":{}},{"type":"wokwi-led","id":"led1","top":-70.8,"left":-197.8,"attrs":{"color":"red"}}],"connections":[["$serialMonitor:TX","nucleo:VCP_RX","",[]],["$serialMonitor:RX","nucleo:VCP_TX","",[]],["led1:A","nucleo:D13","green",["v0"]],["led1:C","nucleo:GND.2","green",["v0"]]],"dependencies":{}}
  1. 编写 main.cpp

PB3是 STM32 芯片的 GPIO 引脚,而 D13 是开发板遵循 Arduino 接口定义的丝印标号。两者在硬件上通过 PCB 线路连通,因此控制 PB3 等同于控制D13接口上的 LED。

官方手册:https://www.st.com.cn/resource/en/user_manual/um1956-stm32-nucleo32-boards-mb1180-stmicroelectronics.pdf

main.cpp:

#include<Arduino.h>voidsetup(){pinMode(PB3,OUTPUT);// PB3对应D13引脚}voidloop(){digitalWrite(PB3,HIGH);// 点亮 LEDdelay(1000);digitalWrite(PB3,LOW);// 熄灭 LEDdelay(1000);}
  1. 运行仿真。点击 ▶️ 后,LED 开始闪烁。

本地使用:插件

官方的云编译资源有限,如果没开订阅,可能比较耗时。如果习惯使用 VS Code + PlatformIO 进行嵌入式开发的,Wokwi 提供了官方插件,可以在离线环境下获得与在线版一致的仿真体验,且能直接使用你现有的编译产物(firmware.bin)。

1. 安装配置

  1. 插件安装:打开 VS Code
  • 进入扩展商店(快捷键 Cmd+Shift+X)
  • 搜索 “Wokwi Simulator”(发布者:Wokwi)
  • 点击安装
  1. 获取许可证:插件需要免费许可证才能使用(只需一次)
  • 在 VS Code 中按 F1,运行命令 Wokwi: Request a new License
  • 浏览器会自动打开 Wokwi 官网,使用 GitHub 账号登录授权
  • 授权成功后,VS Code 中会显示“License installed”
  1. 配置仿真项目,假设你已经有一个 PlatformIO 项目(例如 ESP32 或 STM32),编译后会在.pio/build/xxx/目录下生成firmware.bin文件。

  2. 在项目根目录创建 wokwi.toml

[wokwi] version = 1 # 相对路径指向 PlatformIO 生成的固件 firmware = '.pio/build/esp32dev/firmware.bin' # 请根据实际开发板修改路径 elf = '.pio/build/esp32dev/firmware.elf'
  1. 可选 – 创建 diagram.json

如果你需要自定义电路(添加 LED、传感器等),可以在项目根目录或 wokwi 文件夹中创建 diagram.json。若不创建,Wokwi 会使用默认的空白电路。

  1. 启动仿真
  • 先用 PlatformIO 编译项目(点击底部状态栏的 ✓ Build)
  • 按 F1,运行 Wokwi: Start Simulator
  • 仿真窗口会在 VS Code 内部打开,点击 ▶️ 开始运行

2. 项目实战:中断计数器

通过VSCode + PlatformIO + Wokwi实现一个外部中断计数器的需求,每点击一次按钮,在我们松手时会计数,使计数器加1.

PlatformIO也为插件,直接在VSCode中安装即可,安装后左侧会出现PlatformIO的图标。

  1. 通过PlatformIO插件创建项目,填写对应项目名、开发框架、保存位置即可。
  2. 配置platform的配置文件,告知我们使用的芯片、框架类型
    platform.ini
[env:nucleo_l031k6]platform=ststm32 board=nucleo_l031k6 framework=arduino
  1. 配置wokwi文件,告知我们的编译好的程序路径,方便后续模拟
    wokwi.toml:
[wokwi] version = 1 firmware = '.pio/build/nucleo_l031k6/firmware.bin' elf = '.pio/build/nucleo_l031k6/firmware.elf'
  1. 编写diagram.json文件,即:画电路结构

真实硬件按键会产生抖动,通常需要在中断服务程序中增加 20-50ms 的延时去抖,或使用状态机滤波。本例为仿真演示,在diagram.json仿真中设置了"bounce": "0"消除了抖动。

{"version":1,"author":"Ziyi","editor":"wokwi","parts":[{"type":"board-st-nucleo-l031k6","id":"nucleo","top":0,"left":0,"attrs":{}},{"type":"wokwi-pushbutton","id":"btn1","top":54.2,"left":-96,"attrs":{"color":"green","bounce":"0","key":"i"}}],"connections":[["$serialMonitor:TX","nucleo:VCP_RX","",[]],["$serialMonitor:RX","nucleo:VCP_TX","",[]],["nucleo:D2","btn1:2.r","green",["h-25.25","v10.81"]],["nucleo:GND.1","btn1:1.r","black",["h0"]]],"dependencies":{}}
  1. 编写src/main.cpp,程序的核心逻辑,即:如何实现我们的需求
#include<Arduino.h>// 必须包含,提供 pinMode, attachInterrupt 等定义#include<stdint.h>// 使用 volatile 确保编译器不会优化掉对 count 的访问volatileuint32_tcount=0;// 中断服务程序 (ISR)// 注意:STM32 不需要 IRAM_ATTR,直接定义即可voidincrementCount(){count++;}// 辅助函数:安全地读取计数值uint32_tgetCount(){noInterrupts();// 关闭中断uint32_tc=count;// 复制数据interrupts();// 开启中断returnc;}voidsetup(){Serial.begin(115200);// 等待串口就绪(可选,防止启动时丢失首条日志)// 注意:某些 STM32 核心可能不支持 while(!Serial),如果卡住可注释掉此行while(!Serial){;}pinMode(2,INPUT_PULLUP);// 绑定中断// digitalPinToInterrupt 将物理引脚映射到中断号attachInterrupt(digitalPinToInterrupt(2),incrementCount,RISING);}voidloop(){// 获取安全的计数副本uint32_tcurrentCount=getCount();// 仅在计数变化时输出,减少串口负载staticuint32_tlastCount=0;if(currentCount!=lastCount){Serial.print("Interrupt count: ");Serial.println(currentCount);lastCount=currentCount;}delay(100);// 主循环延时}
  1. 执行Command+Shift+P 或 Ctrl+Shift+P或F1,打开VSCode命令行(),输入PlatformIO: Build命令,执行编译动作

  2. 编译完成后,会在.pio/build文件下生成目标文件

  3. 执行Wokwi: Start Simulator。开启模拟
  4. 点击按钮,在我们松手时,计数器对应值加1
http://www.jsqmd.com/news/863421/

相关文章:

  • 网络化多智能体编队控制方法与实时仿真平台开发【附仿真】
  • 百度网盘限速破解:技术解析与实战应用深度剖析
  • C语言的分支和循环结构
  • 探讨有实力的越南企业出海咨询公司,盈天海外咨询口碑出众 - 工业品牌热点
  • 回归更新,一个简单的重新认识
  • GPT-5.5不只是能写代码——ChatGPT Image 2模块“语义-结构-纹理“三级解耦机制详解
  • 抖音视频批量采集工具:高效构建个人素材库的终极解决方案
  • 子非鱼安知鱼之乐
  • 视觉检测中特征提取的FPGA加速技术【附程序】
  • 全家福摄影品牌企业推荐,这几家靠谱 - 工业品牌热点
  • 5分钟快速上手:AMD Ryzen SMUDebugTool终极性能优化指南
  • G-Helper终极指南:3步解锁华硕笔记本隐藏性能的免费神器
  • 3分钟让GitHub变中文:免费开源的中文化插件终极指南
  • 我在上海滩的奋斗(35-36)
  • 阵亡将士纪念日促销来袭!旅行小物件最高省 30 美元,这些值得入手!
  • Behavioral面试最致命的送命题:如何将“谈谈你最惨痛的失败”逆袭为大厂加分项
  • 国产紧凑式电磁流量计源头厂家排行,实力品牌深度评析 - 陈工日常
  • 从RGB到十六进制:色彩编码的深入探秘
  • runtime 运行时:昇腾NPU的“操作系统内核”
  • 米哈游游戏字体完整指南:免费获取原神、星穹铁道、绝区零精美文字资源
  • ARM指令集架构:T32与A32编码原理与应用
  • IELTS真题听力
  • 从 0 到 1 搭建 RuoyiOffice:30 分钟跑通后端+前端+移动端
  • ARM指令集架构与编码优化实战指南
  • 2026九江装修公司综合实力对比(业主实测靠谱榜单) - GEO排行榜
  • G-Helper完整解决方案:华硕笔记本性能优化与系统控制终极指南
  • 老板临时改价还要今晚上线,618紧急出图好用的AI工具怎么选
  • 国家数据局印发《2026年数字经济发展工作要点》:八项任务背后的数据治理信号
  • 2026云南旅游实测封神!10款西双版纳纯玩团业内口碑广受好评 - 十大品牌榜
  • 2026 防爆式电磁流量计产品参数全解析,防爆性能与功能特点一览 - 陈工日常