Arduino IDE / MicroPython / ESP-IDF を10分でセットアップ【Windows/Mac】

投稿者: | 2025年9月25日

W1 はじめての開発環境

タイトル:Arduino IDE / MicroPython / ESP-IDF を10分でセットアップ【Windows/Mac】
ゴール:LED点滅まで。

必要な物

  • ボード:ESP32-C6 または Raspberry Pi Pico または Arduino Uno R4
  • PC、USBケーブル

手順(概要)

  1. Arduino IDE:ボードマネージャで対象ボードを追加→サンプル「Blink」を書き込み。
  2. MicroPython(Pico):ThonnyでMicroPython FWを書き込み→REPLで点滅。
  3. ESP-IDF(ESP32)idf.py create-projectidf.py -p PORT flash monitorで点滅。

コピペ用コード

Arduino(共通)

void setup(){ pinMode(LED_BUILTIN, OUTPUT); }
void loop(){ digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); delay(500); }

MicroPython(Pico)

from machine import Pin
import utime
led=Pin(25, Pin.OUT)
while True:
    led.toggle(); utime.sleep_ms(500)

ESP-IDF(ESP32-C系)

#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#define LED GPIO_NUM_8
void app_main(void){
  gpio_set_direction(LED, GPIO_MODE_OUTPUT);
  while(1){ gpio_set_level(LED, 1); vTaskDelay(pdMS_TO_TICKS(500));
            gpio_set_level(LED, 0); vTaskDelay(pdMS_TO_TICKS(500)); }
}

トラブルFAQ

  • ポートが見えない:ケーブルのデータ線有無、ドライバ確認。
  • 書き込み失敗:別のシリアルモニタを閉じる。

W2 配線の基本

タイトル:ブレッドボード超入門:LED・抵抗・ボタンの正しい挿し方
ゴール:スイッチでLEDをON/OFF。

必要な物

LED×1、抵抗220Ω×1、タクトスイッチ×1、ジャンパ線、ブレッドボード

手順

  1. LEDアノード→抵抗→GPIO、カソード→GND。
  2. スイッチを内蔵プルアップで使用。片側をGPIO、もう片側をGND。
  3. 押下でLOWとなる前提で判定。

コピペ用コード(Arduino)

const int LED=13, BTN=2;
void setup(){ pinMode(LED,OUTPUT); pinMode(BTN,INPUT_PULLUP); }
void loop(){ digitalWrite(LED, digitalRead(BTN)==LOW); }

トラブルFAQ

  • LED極性逆:長い脚がアノード。
  • ボタン誤配線:内部で2端子が短絡している向きを確認。

W3 シリアル出力の読み方

タイトル:はじめてのSerial.printとprintf:デバッグは文字で見る
ゴール:センサー値をPCに表示。

必要な物

任意センサー(可変抵抗でも可)

手順

  1. ボーレートを決める(例 115200)。
  2. 初期化→ループで値を出力。
  3. CSV形式にすると後で分析しやすい。

コピペ用コード(Arduino)

void setup(){ Serial.begin(115200); }
void loop(){ int v=analogRead(A0);
  Serial.print("adc,"); Serial.println(v); delay(200); }

ESP-IDF

#include "esp_log.h"
void app_main(){ while(1){ ESP_LOGI("APP","adc,%d", 123); vTaskDelay(pdMS_TO_TICKS(200)); } }

FAQ

  • 文字化け:PC側ボーレートを一致。
  • 出力が止まる:長いdelay()でウォッチドッグに留意。

W4 デジタル入力の実践

タイトル:チャタリング対策の基礎:内蔵プルアップで安定ボタン
ゴール:押下/長押し/連打の判定。

手順

  1. INPUT_PULLUPでノイズ耐性。
  2. ソフトウェア・デバウンス(10〜30ms)。
  3. 長押し判定は経過時間で閾値化。

コピペ用コード(Arduino)

const int BTN=2; unsigned long t_down=0; bool prev=HIGH;
void setup(){ pinMode(BTN,INPUT_PULLUP); Serial.begin(115200); }
void loop(){
  bool now=digitalRead(BTN);
  static unsigned long last=0; if(millis()-last<20) return; last=millis(); // debounce
  if(prev==HIGH && now==LOW){ t_down=millis(); Serial.println("down"); }
  if(prev==LOW && now==HIGH){
    unsigned long dur=millis()-t_down;
    Serial.println(dur>800?"long":"short");
  }
  prev=now;
}

W5 アナログ入力の基礎

タイトル:可変抵抗で明るさ調整:PWMとADCを同時に学ぶ
ゴール:ノブでLED調光。

コピペ用コード(Arduino)

const int POT=A0, LED=9; // 9はPWMピン
void setup(){}
void loop(){
  int a=analogRead(POT); int pwm=map(a,0,1023,0,255);
  analogWrite(LED,pwm); delay(10);
}

FAQ

  • ちらつく:PWM周波数変更や容量追加で平滑。

W6 I2Cセンサー入門

タイトル:温湿度センサー(DHT20/SHTC3)を最短で読む
ゴール:温度/湿度を1秒ごとに表示。

手順

  1. SDA/SCLにプルアップ。
  2. ライブラリ導入→初期化→1秒周期で取得。

コピペ用コード(Arduino + AHT20互換)

#include <Wire.h>
#include <Adafruit_AHTX0.h>
Adafruit_AHTX0 aht;
void setup(){ Serial.begin(115200); Wire.begin(); aht.begin(); }
void loop(){ sensors_event_t h,t; aht.getEvent(&h,&t);
  Serial.print(t.temperature); Serial.print(","); Serial.println(h.relative_humidity);
  delay(1000);
}

W7 SPIデバイス入門

タイトル:小型OLEDにメニューを描く:SPIとフォント表示
ゴール:上下ボタンでメニュー操作。

コピペ用コード(Arduino + SSD1306 SPI)

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define W 128
#define H 64
Adafruit_SSD1306 disp(W,H,&SPI, /*DC*/9, /*RST*/8, /*CS*/10);
const char* items[]={"Temp","Config","Info"}; int idx=0;
void setup(){ disp.begin(SSD1306_SWITCHCAPVCC); disp.clearDisplay(); }
void draw(){
  disp.clearDisplay(); for(int i=0;i<3;i++){ disp.setCursor(0, i*16);
    disp.setTextSize(i==idx?2:1); disp.print(items[i]); }
  disp.display();
}
void loop(){ draw(); /* BTNでidxを更新する処理を追加 */ delay(200);}

W8 無線のはじめの一歩(ESP32系)

タイトル:Wi-Fiに繋いでHTTPで値を送る【REST/JSON超入門】
ゴール:センサー値をWebにPOST。

コピペ用コード(Arduino + ESP32)

#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid="SSID"; const char* pass="PASS";
void setup(){ Serial.begin(115200); WiFi.begin(ssid,pass);
  while(WiFi.status()!=WL_CONNECTED) delay(300);
}
void loop(){
  HTTPClient http; http.begin("http://example.com/api");
  http.addHeader("Content-Type","application/json");
  String body="{"temp":25.0}";
  int code=http.POST(body); Serial.println(code);
  http.end(); delay(5000);
}

W9 BLEのはじめの一歩(ESP32系)

タイトル:BLEビーコンとGATT:スマホから値を読む
ゴール:スマホアプリで温度を受信。

コピペ用コード(Arduino + ESP32 BLE)

#include <NimBLEDevice.h>
NimBLEServer* server; NimBLECharacteristic* ch;
void setup(){
  NimBLEDevice::init("Demo");
  server=NimBLEDevice::createServer();
  auto svc=server->createService("1809");
  ch=svc->createCharacteristic("2A1C", NIMBLE_PROPERTY::READ|NIMBLE_PROPERTY::NOTIFY);
  svc->start(); server->getAdvertising()->start();
}
void loop(){
  static float t=25.0; t+=0.1;
  uint8_t buf[1]={0}; ch->setValue(buf,1); ch->notify(true); delay(1000);
}

W10 RTOS超入門

タイトル:FreeRTOSで“並行”を体験:タスク/キュー/ミューテックス
ゴール:計測と表示を別タスク化。

コピペ用コード(ESP-IDF)

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
QueueHandle_t q;
void sensor_task(void*){
  int v=0; while(1){ v++; xQueueSend(q,&v,0); vTaskDelay(pdMS_TO_TICKS(500)); }
}
void display_task(void*){
  int v; while(1){ if(xQueueReceive(q,&v,portMAX_DELAY)) { /* 表示 */ } }
}
void app_main(){ q=xQueueCreate(4,sizeof(int));
  xTaskCreate(sensor_task,"s",2048,NULL,1,NULL);
  xTaskCreate(display_task,"d",2048,NULL,1,NULL);
}

W11 ログと異常復帰

タイトル:ウォッチドッグで固まらせない:例外→自動リセット
ゴール:想定バグでWDT動作を確認。

コピペ用コード(ESP-IDF)

#include "esp_task_wdt.h"
void app_main(){
  esp_task_wdt_init(3, true);
  esp_task_wdt_add(NULL);
  while(1){
    // esp_task_wdt_reset(); // 故意に呼ばずリセットを体験
    vTaskDelay(pdMS_TO_TICKS(1000));
  }
}

W12 省電力の基本

タイトル:スリープで電池長持ち:Deep-sleepと起床イベント
ゴール:1分ごとに起床→計測→送信→再スリープ。

コピペ用コード(ESP-IDF Deep Sleep)

#include "esp_sleep.h"
void app_main(void){
  esp_sleep_enable_timer_wakeup(60ULL*1000*1000);
  // 計測・送信処理
  esp_deep_sleep_start();
}

省電力ポイント

  • 無線は必要時のみON。
  • ログは最小に。
  • レギュレータの静止電流に注意。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です