Wokwi是免費的線上Arduino, ESP32和Raspberry Pi Pico開發板模擬器(simulator),支援的程式語言包括Arduino, MicroPython和CircuitPython(由美國一家電子零組件供應商Adafruit公司主導,從MicroPython衍生出的另一種適用於微電腦控制板的Python 3執行環境)。

Wokwi完全在網頁瀏覽器運作,所以你可以在手機、平板和電腦上編輯模擬電路和程式碼。目前支援下列開發板:
- Arduino UNO
- Arduino Nano
- Arduino MEGA 2560
- ATtiny85(僅8支接腳的微控器)
- TinyPICO(小型ESP32開發板)
- ESP32開發板(支援Arduino及MicroPython程式開發)
- Raspberry Pi Pico(僅支援CircuitPython程式開發)
模擬器能幫助工程師在實驗階段驗證不同的設計和演算法;“Wokwi”是開發團隊腦力激盪之後挑選出比較簡短、容易發音的名字,沒有特別的意義。跟Autodesk(歐特克)公司旗下的TinkerCAD相比,Wokwi的介面稍嫌陽春,可用的電子元件和模組也比較少,畢竟是新創公司,有很大的被併購發展潛力,重點是Wokwi支援ESP32和MicroPython。你可以在Wokwi的Github頁面提出新功能要求。
題外話,最近Steam平台上有個「電工模擬」遊戲“Electrician Simulator”,第一章(First Shock,代表「首次觸電」)免費試玩。玩家在遊戲中扮演電工技師,維修室內電源配線和各種家電,遊戲裡面還有Arduino UNO相容板 這遊戲應該發展成電工線上培訓教室,通關之後再參加實境模擬測驗,就可以拿到元宇宙電工執照。

還有一個PC Building Simulator(組裝PC模擬器),有Windows, PS4, Switch和Xbox遊戲機版本,能讓玩家體驗組裝和改造個人電腦。這款遊戲的評價居然低於Goat Simulator(山羊模擬器)和Untitled Goose Game(無標題的鵝遊戲)…嗯,現實世界已經夠折磨了,在元宇宙投胎當小動物比較自在。
線上模擬執行ESP32 Arduino程式
點擊Wokwi首頁上的開發板,即可編輯電路和程式碼。

點擊首頁上的“MORE OPTIONS”(更多選項),可選擇其他控制板或者ESP32 MicroPython程式開發。本文範例採用ESP32和Arduino語言。
你也可以直接點擊底下的超連結,直接進入ESP32開發板和Arduino程式編輯頁面。
https://wokwi.com/arduino/new?template=esp32
如果網址後面不加“template=esp32”參數,預設控制板將是Arduino UNO,你可以點擊這個網址試試:
在網址後面加上“lang=zh”參數,介面的選單內容將變成簡體中文。此網站的中文化仍持續進行中,所以多數內容只有英文。
https://wokwi.com/arduino/new?template=esp32&lang=zh
在模擬電路中加入NeoPixel(WS2812)全彩LED色環元件
WS2812是一種全彩LED晶片,內含紅、綠、藍三色LED以及一個控制IC,封裝尺寸為5mmx5mm(通稱5050型),工作電壓介於4~7V,通常接5V。光是接上電源,WS2812不會發光,因為它的LED全都由內部的IC控制。

Adafruit公司將WS2812晶片取名為NeoPixel(直譯為「霓虹像素」)。DIY實驗購買的通常都是已焊接在PCB板的WS2812 LED模組,而非單獨的WS2812晶片。NeoPixel模組有不同晶片數量,常見的外觀有矩形、圓環和燈條型式。

NeoPixel模組有4個接腳,以序列通訊方式傳遞色彩資料,模組上的每個晶片可以個別設定顏色。Adafruit公司開發了一個控制NeoPixel模組的Arduino程式庫,叫做“Adafruit_NeoPixel”。
- Vcc電源
- GND接地
- Din資料輸入:接微電腦開發板的數位輸出腳
- Dout資料輸出:用於串接另一個NeoPixel模組
按一下Wokwi電路編輯畫面的「+」:

點擊選單中的NeoPixel環(NeoPixel Ring)模組:

環狀的NeoPixel模組就被加入編輯畫面:

基本電路編輯功能介紹
按著編輯畫面上的電子元件或開發板不放,可拖曳改變它的位置。
點擊元件或開發板,選定它,每按一次R鍵(代表Rotation,旋轉),可旋轉90度。

點擊元件或開發板,選定它,再按一下Del鍵,可刪除它。
點擊NeoPixel模組的GND(接地腳),將能引出一條黑色導線,ESP32開發板上的GND接腳也會呈現反白提示。再點擊ESP32開發板的任一GND腳,兩邊的接地就相連在一起了。

接線過程中,按一下ESC鍵,可取消接線。
如果接錯線,按一下線條兩端以外的部份,可選取它,再點擊一次可刪除它。
依照下圖連接NeoPixel環和ESP32開發板,NeoPixel模組的資料輸入接ESP32的數位12腳(你可以接其他數位腳,但底下的程式碼要跟著修改)。線條顏色不重要,下一篇貼文再介紹如何改變接線顏色。

在電路編輯畫面滾動滑鼠滾輪,或者按一下+或-鍵,可放大或縮小電路。按一下F鍵(代表Fit,符合),電路將自動縮放到符合窗格的顯示尺寸。
按著電路的空白處拖曳,可拖動整個電路。
測試NeoPixel Arduino程式
Wokwi模擬器環境已內建Adafruit_NeoPixel程式庫,請將底下的程式碼貼入Wokwi程式編輯器窗格:
#include <Adafruit_NeoPixel.h> #define PIN 12 // NeoPixel的接腳 #define PIXELS 16 // NeoPixel模組的晶片數量 // 建立NeoPixel控制程式物件 Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } if(WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } // 虹彩燈光效果 void rainbow(uint8_t wait) { uint16_t i, j; for(j=0; j<256; j++) { for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, Wheel((i+j) & 255)); } strip.show(); delay(wait); } } void setup() { strip.begin(); // 啟動NexoPixel strip.setBrightness(255); // 設定亮度(最亮) strip.show(); // 顯示燈光 } void loop() { rainbow(50); // 間隔50毫秒,顯示虹彩。 }
然後按一下模擬器畫面的三角形(開始模擬)鈕,過一會兒,NeoPixel模組的LED將輪流發光。

謝謝教學
不客氣!