0. はじめに
無料で、オンラインで使える、ハードウェア シミュレータを紹介します。
シミュレーションできるマイコンボードは、以下のラインナップ。
- Arduino Uno / Mega / Nano
- ESP32 / ESP32-Sx / ESP32-Cx
- STM32
- Raspberry Pi Pico
- ATtiny85
ただ単にSoC(MCU)をシミュレーションするだけではなく、周辺デバイスや開発環境を含めてシミュレーションできます。
使える開発環境は、Arduino環境、Micropython環境 と Rust環境。Raspberry Pi Pico のみ CircuitPthon環境も。
つまり、オンラインで、マイコンとセンサーやデバイスを組み合わせて配線して、C/C++やPythonでコードを書いて、そのコードをオンラインで、すぐに実行できるのです。便利だ。
以下の動画は、ATTiny85とLEDを6本使って、下記のスケッチ(プログラム)で動作させた結果です。
int pins[] = {PB2, PB1, PB0, PB4, PB3, PB5};
void setup() {
// put your setup code here, to run once:
for (int n=0; n<6; n++) {
pinMode(pins[n], OUTPUT);
}
}
void loop() {
// put your main code here, to run repeatedly:
static int currect_pin = 0;
static int previous_pin = 0;
digitalWrite(pins[previous_pin], LOW);
digitalWrite(pins[currect_pin], HIGH);
previous_pin = currect_pin;
currect_pin = (++currect_pin) % 6;
delay(100);
}
1. WOKWI
そのオンライン シミュレータは、WOKWI です。
ボードを選んで、すでに公開されているプロジェクトを流用するも良し、新規で作るも良し。
2. 配線図を書く
まずは、WOKWIでサポートしているパーツ(センサーやデバイス)を使用して、配線図を書きます。
↓赤丸した+アイコンをクリックすると、使用できるパーツのリストが表示されます。
パーツ類は、以下のラインナップ。
普通の電子工作なら、十分なライナップだと思います。
配置したセンサーやデバイスのピンにマウスを当てると、簡単に配線できます。
SPIやI2Cデバイスなど、信号線が決まっているピンで、マイコン側で使えるピンが制限される場合は、使えるピンが目立つように工夫されているので、リアルな配線より、配線間違いは起こし難いように思います。
配線中はマウスクリックすると、そこまでの配線を確定することができます。使ってみればすぐに要領がつかめると思います。
なお、すべてのパーツ類はVCCとGNDの配線は省略できます(ブレッドボードでは、そうは行かないので、地味にありがたい)。
3. コードを書く
配線が終わったら、コードを書きます。ほとんど、Arduino IDEでコードを書いているのと変わらない感覚です。サジェストも出ます。
4. 実行
回路図側の ▶︎アイコンをクリックすると、ビルドされて実際にシミュレーションが開始されます。
コンパイルエラーがある場合は、エラーメッセージがポップ表示されます。
■アイコンクリックで終了、
Pause(‖)アイコンをクリックすると、一時停止するのですが、その時は、各ピンの現在の情報が表示されます。
5. Micropython環境 を試してみる
パーツ一覧にある SD-CardスロットをESP32に接続して、自分が以前投稿した記事のコードを試してみる。
起動すると、画面右下にREPLの領域がちゃんと出てくる。ESP32を起動した時のログまで表示され本格的だ。
REPLにPythonコードを打ち込んでもよいが、左側のペインにmain.py
が表示されていたので、ここに以前書いたSDカードをアクセスするコードをコピペして実行させた。
黄色線で囲った出力が、このコードの出力結果だ。実機と全く同じでSDカードに読み書きできています。
6. おわりに
つい先日、こんなすごいオンライン シミュレータが無料で利用できることに驚いて、急いでこの記事を書きました。
【WOKWI CLUB】課金すると、ローカルに環境を作れて、VSCode上でシミュレーションが行えたり、パーツや使用するライブラリが自由に追加できるようです。
また、本格的なロジックアナライザでプロトコル解析も行えるようです。
無料枠でも十分使えるので、ブレッドボードで回路を組むよりも手軽だし、コードの検証もできるので、今後、どんどん利用したいと思います。
マウス操作でスイッチ類のオン/オフは操作できますが、マウス操作できないInput系のセンサーやデバイスを使う場合は、コード上で工夫が必要みたいです。例えば、温度センサーをつないでも、実際の室温を測ってくれませんから。
使ってみればすぐに慣れると考え、今回は詳しい使い方の説明は省きました。
もう少し網羅的に知りたい方は、(英語ですが)以下の動画が参考になると思います。
自分が持っていないセンサーやデバイスを使ってみるのも面白そうです。
以上
WOKWI
ドキュメント(英語、ドイツ語、ブラジル語、中国語)
Micropython環境 直リンク
Rust環境 直リンク
CircuitPython環境 直リンク(Raspberry Pi Picoのみ)