嵌入式在线仿真平台wokwi使用

嵌入式在线仿真平台wokwi使用

	Wokwi 是一个在线电子电路仿真平台,主要用于模拟和测试基于微控制器的项目(如 Arduino、ESP32、Raspberry Pi Pico 等)。它无需安装任何软件,直接在浏览器中即可完成电路设计、代码编写和实时仿真,适合开发者、教育者和爱好者快速验证想法。

主要特点:

  1. 无需安装 ,通过浏览器即可访(https://wokwi.com/))。
    支持多人协作,轻松分享项目链接。
  2. 支持的硬件
    微控制器:Arduino Uno、ESP32、ATtiny85、Raspberry Pi Pico 等。
    外设:LED、传感器(温湿度、超声波等)、LCD 屏幕、电机、舵机等。
    扩展库:支持自定义元件和第三方库(如 Adafruit 传感器)。
    代码编辑与调试
  3. 代码编辑与调试
    内置代码编辑器,支持 Arduino C/C++、MicroPython 等语言。
    提供实时仿真日志、串口监视器、变量跟踪和调试工具(如断点)。
  4. 可视化交互
    仿真时可点击按钮、旋转电位器,模拟真实硬件交互。
    支持虚拟示波器(Logic Analyzer),查看信号波形。

使用介绍

通过wokwi官方文档的案例试用一下。
1 Arduino Uno 打印"Hello World"
在这里插入图片描述

```c
/* Hello Wokwi! */

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.setCursor(1, 0);
  lcd.print("Hello, Wokwi!");
}

void loop() {
  lcd.setCursor(7, 1);
  lcd.print(millis() / 1000);
}

2 ATtiny85模块监测温湿度 "

在这里插入图片描述


/* 
    Why the heart icon? Because I thought it was cool
    and I want to use it in the future with some heartbeat sensor.
    I needed to keep it somewhere and it was here. ;)
 */

#include <dht.h>
#include <TinyWireM.h>
#include <Tiny4kOLED.h>

#define DHT22_PIN PB1

const unsigned char  img_heart_small[] PROGMEM = {
  0x00, 0x00, 0xc0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x80, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00
};

const unsigned char  img_heart_big[] PROGMEM = {
  0xe0, 0xf0, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xe0, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00
};

const unsigned char  img_thermometer[] PROGMEM = {
  0x00, 0xfe, 0x03, 0xfe, 0x50,
  0x00, 0xff, 0x00, 0xff, 0x55,
  0x60, 0x9f, 0x80, 0x9f, 0x65,
};

dht DHT;

void splash() {
  oled.clear();
  oled.setCursor(15, 1);
  oled.print(F("ATtiny85+SSD1306"));

  oled.setCursor(42, 3);
  oled.print(F("Example"));

  oled.setCursor(35, 7);
  oled.print(F("wokwi.com"));
}

void heartBeat() {
  static char big = 1;
  static long startTime = 0;
  long currentTime;

  // Get current time
  currentTime = millis();

  // Update if 200ms passed
  if ((currentTime - startTime) > 200) {
    startTime = currentTime;
    big = 1 - big;

    if (big) {
      oled.bitmap(20, 4, 37, 6, img_heart_big);
    } else {
      oled.bitmap(20, 4, 37, 6, img_heart_small);
    }
  }
}

void prepareDisplay() {
  unsigned int i, k;
  unsigned char ch[5];

  oled.clear();
  oled.begin();

  oled.setCursor(20, 1);
  oled.print(F("ATtiny85+SSD1306"));
  oled.setCursor(3, 2);
  oled.print(F("temperature|humidity"));

  oled.bitmap(105, 4, 110, 7, img_thermometer);
  oled.setCursor(57, 4);
  oled.print(F("24.0C"));
  oled.setCursor(57, 5);
  oled.print(F("40.0%"));

  oled.bitmap(10, 5, 17, 2, img_heart_small);
}

float getTemperature() {
  return DHT.temperature;
}

float getHumidity() {
  return DHT.humidity;
}

void setup() {
  pinMode(DHT22_PIN, INPUT);

  oled.begin(128, 64, sizeof(tiny4koled_init_128x64br), tiny4koled_init_128x64br);

  // Two fonts are supplied with this library, FONT8X16 and FONT6X8
  oled.setFont(FONT6X8);

  // To clear all the memory
  oled.clear();
  oled.on();

  splash();

  delay(3000);
  prepareDisplay();
}

void loop() {
  static long startTime = 0;
  long currentTime;

  DHT.read22(DHT22_PIN);

  // Get current time
  currentTime = millis();

  // Checks 1 second passed
  if ((currentTime - startTime) > 1000) {
    startTime = currentTime;

    // Update temperature
    float temperature = getTemperature();

    // Set cursor
    oled.setCursor(57, 4);

    // Print to display
    oled.print(temperature, 1);
    oled.print("C  ");

    // Update humidity
    float humidity = getHumidity();

    // Set cursor
    oled.setCursor(57, 5);

    // Print to display
    oled.print(humidity, 1);
    oled.print("%  ");

    oled.bitmap(105, 4, 110, 7, img_thermometer);
  }

  heartBeat();
}

嵌入式在线仿真平台wokwi试用

内容概要:该文档旨在详细介绍如何利用Wokwi这一在线电子电路仿真平台对基于ESP-IDF(Espressif IoT Development Framework)创建的ESP32项目进行模拟运行。首先简要介绍了Wokwi的特点,即无需物理硬件就能测试多种微控制器的效果,特别是支持ESP32及其Arduino架构;其次具体指导了如何设置和操作ESP-IDF项目,包括如何修改代码以适配Wokwi平台,并给出了详细的步骤,如调整GPIO配置以配合特定LED电路仿真;然后说明了通过命令行工具或其他IDE构建ESP-IDF项目并获取必要的二进制文件(.bin或.uf2),最后详细介绍了这些二进制文件如何被用来启动Wokwi上的模拟过程。 适用人群:本教程非常适合那些希望深入了解嵌入式系统编程尤其是ESP-IDF开发框架,并希望通过虚拟方式提前验证他们设计的技术爱好者或初学者们;同时也能帮助有一定经验和想快速掌握新技能的专业人士。 使用场景及目标:①使开发者能够绕过实际的电路制作,在线上就完成初步的功能测试和代码验证;②提高ESP-IDF学习效率,降低实物开发初期成本和风险;③加速开发流程,促进更快原型迭代和错误修复。通过对ESP32 GPIO编程的学习,理解低级硬件接口的操作,从而能更好地应对真实的硬件应用环境。 其他说明:文档提供了丰富的链接指向额外的帮助资料和技术论坛帖子,以便读者进一步研究和解决问题。这不仅提高了文档的实用性和易读性,同时也建立了完整的自学闭环,便于后续深入探索。
### Wokwi在线Arduino模拟器的功能与使用教程 #### 功能概述 WOKWI 提供了一个强大的在线环境用于仿真和测试 Arduino 及其他微控制器项目。该平台不仅支持多种硬件设备,还提供了丰富的交互式工具来帮助开发者更高效地工作[^3]。 #### 创建新项目 访问[WOKWI](https://wokwi.com/)首页后,在页面顶部导航栏中点击“Create New Project”,可以选择创建一个新的 Arduino 或 ESP32 工程。对于基于ATTiny85的开发板,同样可以在新建项目的选项里找到对应的模板[^1]。 #### 编辑代码 进入编辑界面后可以看到左侧为电路设计区,右侧则是编程区域。在这里可以直接编写C/C++源码并即时编译运行。为了方便用户操作,平台内置了大量的库文件以及示例程序可供参考[^2]。 ```cpp void setup() { pinMode(1, OUTPUT); // 设置引脚模式 } void loop() { digitalWrite(1, HIGH); delay(1000); digitalWrite(1, LOW); delay(1000); } ``` #### 设计电路图 除了写代码之外,还可以通过拖拽的方式轻松构建虚拟面包板上的连接关系。比如要实现LED闪烁实验,则只需将 LED 组件从零件列表拖放到画布上并与相应的 GPIO 引脚相连即可完成整个电路搭建过程。 #### 运行调试 当一切准备就绪之后就可以按下绿色播放按钮启动仿真流程了。此时不仅能观察到预期的效果展示(如灯光亮灭),而且还能利用内建的日志输出窗口查看串口打印的信息以便于排查可能出现的问题所在。 #### 自定义组件 值得一提的是,如果现有资源无法满足特定需求的话,那么不妨尝试一下自定义元件这一特色功能吧!它允许上传个人制作好的模型或者修改已有对象属性从而更好地适配实际应用场景的要求。 #### 键盘快捷键 为了让用户体验更加流畅自然,软件特别加入了众多实用性的快捷方式设置。例如Ctrl+S保存当前进度;F5重新加载网页而不丢失未提交的数据等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水手勇敢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值