ESP32 で Sigfox をはじめる

ESP32 で Sigfox をはじめる

はじめに この記事では、ESP32 と Sigfox ブレイクアウトボード BRKLSM100A を使って、WiFiの届かない数キロメートル先の基地局へセンサーデータを送信する方法を解説します。Sigfox は年間1000円程度・アクセスポイント不要で使える LPWAN サービスで、ESP-NOW や BLE が届かない広域 IoT 通信に適しています。ATコマンドの設定手順から Sigfox クラウドの Callback 設定(Slack 通知)まで、実際に躓いた点も含めて紹介します。 Sigfox の具体的な設定方法や技術的な質問にはお答えできませんのでご了承ください。 Sigfoxとは Sigfox は、低消費電力の広域ネットワーク(LPWAN: Low Power Wide Area Network)技術の一つで、主に IoT デバイス向けに設計されています。LPWANは0G回線とも呼ばれています。Sigfox サービスを展開するのはフランスの会社ですが、日本では 京セラさんが代理店 として窓口に立ってくれています。なにか分からないことがあれば、京セラさんが丁寧にご回答してくれます。 https://www.kccs.co.jp/contact/sigfox/inquiry/ 以下、Sigfox の特徴をまとめておきます。 低消費電力 デバイスのバッテリー寿命が数年に渡ることが可能です。通信頻度が低く、消費電力が非常に少ない設計になっています。Sigfox デバイスを制御するには、UART の AT コマンドを使います。Arduino や ESP32、または PIC などでも制御できます。低消費電力の PIC であれば、Sigfox デバイスと組み合わせて太陽電池やリチウム電池で長期間運用も実現可能です。 広範囲カバー Sigfox デバイスから Sigfox 基地局(Sigfox ゲートウェイ)まで、数キロメートルから数十キロメートルにわたる広範囲の通信が可能です。都市部では数キロメートル、農村部では数十キロメートルの通信距離をカバーします。Sigfox GW(ゲートウェイ)は自前で用意する必要はありません。下記 URL に Sigfox 通信できるエリアが示されています。日本の首都圏で広く展開されており、山間部などの一部地方ではつながらない場合があります。 https://www.kccs.co.jp/sigfox/area/ 世界中の多くの国で利用可能で、国境を越えた通信が容易に行えます。Sigfox のネットワークオペレーターがインフラを提供します。 低データレート 1回の通信で最大12バイトのペイロードを送信できます。16進数2文字で1バイトなので、最大24桁の16進文字列(例: 0123456789ABCDEF01234567)まで送れます。センサ値をバイナリに詰めて16進文字列として送れば、12バイト内に複数の値を収められます。一日の送信回数に制限があり、通常は140回までです。 ...

公開: 2024年6月28日 · 更新: 2026年5月25日 · Toshihiko Arai
Square Terminal APIを使った会計処理

Square Terminal APIを使った会計処理

この記事の範囲と前提 以前、オリジナルの Android アプリから Square Terminal 端末と連携して会計処理をする仕事に携わったときの記録です。公式ドキュメントが分散しており目当ての情報に辿り着くまで苦労したので、プロジェクトの備忘録として大まかな手順をまとめました。 この記事では次のことを扱います。 Square Terminal 端末をアプリ側のカードリーダーとして使う前提 Terminal API でデバイスコードを発行し、端末とペアリングするまで アプリ側からチェックアウト(金額表示)リクエストを送り、状態を確認・キャンセルするまで ACCESS_TOKEN、device_id、idempotency_key といった必須の値の扱い Webhook の利用シーンと最低限の運用注意 前提として次が必要です。 Square Developer アカウントと、そこで作成した Application 一式(ACCESS_TOKEN・location_id 取得用) 本番アカウントでサインインできる Square Terminal 端末 1 台以上 端末を叩く側のアプリケーション(この記事では Android アプリを想定していますが、HTTP が投げられれば言語は問いません) curl または Square API Explorer など、API を叩ける環境 サンプルコードでは Square-Version として 2024-06-04 と 2024-04-17 の両方が出てきます。これは当時実際に動作確認したバージョンで、現行の API バージョンに合わせて読み替えてください。Square API は後方互換を保ったままバージョン番号が定期的に上がっていく仕組みです。 この記事の内容に関する個別の質問にはお答えできません。あくまで「当時こうやって動かしたメモ」として参照してください。 公式ドキュメントとツール 実装中によく参照したものは次の通りです。手元から開きやすいよう、最初にまとめておきます。 Terminal API クイックスタート(公式) Square Terminal の支払いフロー(公式) CreateDeviceCode(API Explorer) 関連する記事 Android アプリ側の作りや、ACCESS_TOKEN を扱う中間サーバーの作り方は別記事にまとめています。Square 連携を組み立てる前後で参考になりそうなものを並べておきます。 ...

公開: 2024年6月19日 · 更新: 2026年5月30日 · Toshihiko Arai
ダイソーのBluetoothリモコンシャッターをESP32でハックする

ダイソーのBluetoothリモコンシャッターをESP32でハックする

ダイソーで販売されている300円のBluetoothリモコンシャッター(Remote Shutter)を、ESP32側から BLE HIDデバイス として検出・接続し、ボタンが押されたタイミングで LED を点灯/消灯させてみました。スマホ用のシャッターリモコンを、自作IoTのトリガーとして再利用するイメージです。 この記事では、ESP32とリモコンシャッターをBLEで繋ぐ最小スケッチ、PlatformIO 側で踏みやすい arduino-esp32 のバージョン問題、そして同じ仕組みを使いやすくまとめた自作ライブラリ「BlueShutHacker」の使い方までを紹介します。ESP32でのBLE開発の流れを掴みたい方や、安価な市販Bluetoothデバイスを入力源として使い回したい方向けです。 実装にあたっては、下記の二つの記事をとても参考にさせていただきました。 https://wakwak-koba.hatenadiary.jp/entry/20181009/p1 https://lang-ship.com/blog/work/m5stickc-esp32-bluetooth-shutter-1-0-4/ 動画を再生 必要なもの 最小構成で動かす場合に用意したものは次の通りです。 ESP32 開発ボード(ESP32 DevKitC など、BLE対応のもの) ダイソーの Bluetooth リモコンシャッター(300円・ボタン電池付属) LED 1個と電流制限抵抗(330Ω 前後)、配線用ジャンパー線 PlatformIO(VS Code または CLion)または Arduino IDE ESP32 自体の最初の動作確認がまだの場合は、先に ESP32でLチカするまでの設定 で Arduino IDE からの書き込みまで通しておくと、本記事の内容に集中できます。 リモコンシャッターでLチカさせる ESP32をつかって、リモコンシャッターのボタンが押されたらLEDの点灯状態を変化させてみました。 ソースコード こちらがそのソースコードです: #include <Arduino.h> #include "BLEDevice.h" #define LED_PIN 13 static uint16_t GATT_HID = 0x1812; //static BLEUUID GATT_HID_REPORT((uint16_t) 0x2a4d); static BLEAddress *pServerAddress = NULL; class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks { void onResult(BLEAdvertisedDevice advertisedDevice) { if (advertisedDevice.haveServiceUUID() && advertisedDevice.getServiceUUID().equals(GATT_HID)) { advertisedDevice.getScan()->stop(); pServerAddress = new BLEAddress(advertisedDevice.getAddress()); Serial.print("found device:"); Serial.println(pServerAddress->toString().c_str()); // 2a:07:98:10:33:fa } } }; void updateLedState() { static boolean ledState = true; if (ledState == 0) { digitalWrite(LED_PIN, LOW); } else { digitalWrite(LED_PIN, HIGH); } ledState = !ledState; } static void notifyCallback(BLERemoteCharacteristic *pBLERemoteCharacteristic, uint8_t *pData, size_t length, bool isNotify) { Serial.println("notifyCallback"); switch (pData[0]) { case 0x01: // Volume Up Serial.println("Volume Up"); updateLedState(); break; case 0x02: // Volume Down Serial.println("Volume Down"); updateLedState(); break; } } void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); BLEDevice::init(""); BLEScan *pBLEScan = BLEDevice::getScan(); pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); pBLEScan->setActiveScan(true); pBLEScan->start(30); } void loop() { static boolean connected = false; if (pServerAddress != NULL && !connected) { BLEClient *pClient = BLEDevice::createClient(); pClient->connect(*pServerAddress); if(pClient->isConnected()) { Serial.println("connected"); } else { return; } //! arduino-esp32のバージョンによってはクラッシュするので注意 //! ver 2.0.2 だとここで落ちる → ver 2.0.14 または ver 3.20014.0 で動作確認済み BLERemoteService *pRemoteService = pClient->getService(GATT_HID); if (pRemoteService) { // BLERemoteCharacteristic *pRemoteCharacteristic = pRemoteService->getCharacteristic(GATT_HID_REPORT); // pRemoteCharacteristic->registerForNotify(notifyCallback); std::map<uint16_t, BLERemoteCharacteristic*>* mapCharacteristics = pRemoteService->getCharacteristicsByHandle(); for (std::map<uint16_t, BLERemoteCharacteristic*>::iterator i = mapCharacteristics->begin(); i != mapCharacteristics->end(); ++i) { Serial.print("connected to:"); Serial.println(i->second->getUUID().toString().c_str()); if (i->second->canNotify()) { Serial.println(" - Add Notify"); i->second->registerForNotify(notifyCallback); } } connected = true; } } delay(10); // 高負荷防止 } 注意点 ソースコードをアップロードするにあたって、注意点があります。PlatformIO を使う場合、arduino-esp32 のバージョンが古いとクラッシュします。ソースコード内のコメント注釈のとおり、version 2.0.2 だとダメでした。version 2.0.14 以降であれば問題なさそうです。 ...

公開: 2024年3月14日 · 更新: 2026年5月28日 · Toshihiko Arai

ESP32のマルチスレッドで複数のサーボモータを同時に動かす方法

ESP32とFreeRTOSのタスク(マルチスレッド)機能を使って、2つのサーボモータを同時に動かす方法をまとめます。delay 関数だけだと一方の処理待ちでもう一方が止まり、複数のサーボを別々のリズムで動かすのが難しいです。本記事では ESP32Servo ライブラリと xTaskCreate を組み合わせ、それぞれのサーボを独立したタスクで制御します。 必要なものはESP32ボード(ESP32 DevKitCなど)、SG90のようなサーボモータ2個、サーボ用の外部5V電源、Arduino IDEまたは PlatformIO のいずれかです。実際の動作は次の動画で確認できます。 動画を再生 なんの工夫もなしに delay 関数を使ってサーボモータを動かそうとすると、ひとつのサーボモータの処理が終わるまで待たなければならず、同時に動かすことが難しいです。非ブロッキングなポーリング処理(コルーチン)で動かすやり方も考えられますが、コーディングが複雑になり管理が難しいです。ESP32ならばFreeRTOSのタスク機能(マルチスレッド)が使えますので、簡単に複数のサーボモータを動かすことが可能です。 ソースコード 次のコードは、FreeRTOSのタスク利用してマルチスレッドで複数サーボモータを制御する例です: #include <Arduino.h> #include <ESP32Servo.h> #define SERVO_A_PIN 32 #define SERVO_B_PIN 33 Servo servoA, servoB; const int pulse_min = 544; // default 544us const int pulse_max = 2400; // default 2400us // プロトタイプ宣言 void taskServoA(void * parameter); void taskServoB(void * parameter); void setup() { Serial.begin(115200); servoA.attach(SERVO_A_PIN, pulse_min, pulse_max); servoB.attach(SERVO_B_PIN, pulse_min, pulse_max); servoA.write(5); // リセット servoB.write(5); // リセット delay(2000); // FreeRTOSを使用してタスクを作成 xTaskCreate(taskServoA, "TaskServoA", 10000, NULL, 1, NULL); xTaskCreate(taskServoB, "TaskServoB", 10000, NULL, 1, NULL); } void loop() { } void taskServoA(void * parameter) { for (;;) { for (int pos = 5; pos <= 180; pos += 1) { servoA.write(pos); vTaskDelay(2 / portTICK_PERIOD_MS); } vTaskDelay(700 / portTICK_PERIOD_MS); for (int pos = 180; pos >= 5; pos -= 1) { servoA.write(pos); vTaskDelay(2 / portTICK_PERIOD_MS); } vTaskDelay(700 / portTICK_PERIOD_MS); } } void taskServoB(void * parameter) { for (;;) { for (int pos = 5; pos <= 180; pos += 1) { servoB.write(pos); vTaskDelay(6 / portTICK_PERIOD_MS); } vTaskDelay(300 / portTICK_PERIOD_MS); for (int pos = 180; pos >= 5; pos -= 1) { servoB.write(pos); vTaskDelay(6 / portTICK_PERIOD_MS); } vTaskDelay(300 / portTICK_PERIOD_MS); } } 解説 サーボモータを、0度から180度へ行き来させるプログラミングです。サーボモータの制御は、ESP32Servo ライブラリを使用しました。 ...

公開: 2024年1月23日 · 更新: 2026年5月28日 · Toshihiko Arai

ESP32でBluetooth Classicを使ってAndroidと通信する

この記事では、 ESP32 から Android アプリへ Bluetooth Classic(SPP)で文字列を送信し、Android 側で表示する ところまでを最小構成で作ります。ESP32 側は Arduino IDE の BluetoothSerial、Android 側は Kotlin の BluetoothSocket を使い、UART のシリアル通信と同じ感覚で書ける構成です。 逆方向の BLE で iOS と通信する例や、BLE と Classic の住み分けを先に把握したい場合は、後半の関連記事 も合わせて参考にしてください。 先に要点 ESP32 側は BluetoothSerial で SerialBT.begin("デバイス名") するだけで、SPP のサーバ側が立ち上がります Android からは事前に OS の Bluetooth 設定でペアリングしておき、アプリ側では SPP 標準の UUID 00001101-0000-1000-8000-00805F9B34FB で BluetoothSocket を張ります Android 12 以降は BLUETOOTH_CONNECT のランタイム権限が必要なので、AndroidManifest.xml への記述だけでなくアプリ側でのリクエストも忘れずに行います BLE 通信側で iOS と Lチカしたい場合ははじめてのBLE通信、iOSからESP32のLチカ 、BLE で ESP32 から iOS にデータを送りたい場合はESP32からiOSへBLEでデータを送信する を参照してください ゴール 動画のように、ESP32からBluetooth Classic経由でAndroidアプリへデータを送信し、データを表示するまでをゴールとします。 ...

公開: 2024年1月20日 · 更新: 2026年5月29日 · Toshihiko Arai

Clion x PlatformIOでESP32(Arduino)開発

この記事は、 CLionをエディタとして使い、PlatformIO CLI(pioコマンド)でESP32(Arduino)をビルド・アップロードする 開発環境の作り方をまとめたものです。CLionのコード補完や定義ジャンプの快適さを活かしつつ、ビルドとアップロードはコマンドラインのpio runに任せる、という構成になります。 JetBrains製品の使いやすさに感心している中、ESP32(Arduino)のC++開発をClionで行うことに成功しました。これにより、「VS Code x PlatformIO」から「Clion x PlatformIO」へ開発環境を変更できました。情報が少なかったため苦労しましたが、ChatGPTやGoogle検索を駆使して解決できました。 ESP32全般の記事は Arduino・ESP32・Raspberry Piで始めるIoT電子工作まとめ にまとめています。まだESP32を動かしたことがない方は、先に ESP32でLチカするまでの設定 を済ませておくとスムーズです。 事前準備: PlatformIOプラグインのインストール VS Codeの拡張機能でPlatformIOをインストールしてましたが、VS Codeと密接してるためClionからは使えないようです。改めてPlatformIOを単体でインストールしました。 $ wget -O get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py $ python3 get-platformio.py その後シェルにパスを通します。例: ~/.zshrc export PATH="$PATH:/Users/xxxxx/.platformio/penv/bin" Clionのインストール JetBrainsの公式ウェブサイトからClionをダウンロードし、インストールします。有料ですが、仕事になるようであればVS Codeよりかなりオススメです。phpStorm初め、 まとめ買いできるプランもあるのでそちらを選ぶと割安 でした。(4000円/月くらい) ClionでPlatformIOを使えるようにする Clionを開きます。 「File」メニューから「Settings」を選択します。 「Plugins」セクションを開き、「Marketplace」タブで「PlatformIO」を検索します。 「PlatformIO for CLion」プラグインを見つけ、インストールします。 新しいPlatformIOプロジェクトの作成 すでにVScode x PlatformIOでのプロジェクトがある場合にも、まずはClionで新しいPlatformIOプロジェクトの作成をすることをおすすめします。 「File」メニューから「New Project」を選択します。 「PlatformIO」セクションからESP32のプロジェクトを選択します。 必要な設定を行い、「Create」をクリックしてプロジェクトを作成します。 このことにより、ESP32の標準プログラムがローカル環境へインストールされ、IDE上で標準クラスの定義へのジャンプが機能します。 ESP32開発ボードの設定 後は通常通り platformio.ini でビルド情報を書き換えて開発してください。以下は、私の開発環境の一例です。 [platformio] ;src_dir = lib/Adafruit_Seesaw/examples/soilsensor_example ;src_dir = lib/Adafruit_Seesaw/examples/with_display ;src_dir = lib/AE_TSL2572/examples/demo ;src_dir = lib/mhz19_uart/examples/demo ;src_dir = lib/DHT22/examples/demo ;src_dir = lib/Relay/examples/relay_test ;src_dir = lib/Relay/examples/solenoid_valve_demo ;src_dir = lib/Relay/examples/solenoid_valve_online ;src_dir = lib/TGS2450/examples/demo ;src_dir = lib/TGS2450/examples/arduino_uno ;src_dir = lib/TGS2450/examples/uno_debugger ;src_dir = lib/phMeter/examples/demo ;src_dir = lib/phMeter/examples/phMonitor ;src_dir = lib/DS18B20/examples/demo ;src_dir = lib/WS2812B/examples/simple ;src_dir = lib/WS2812B/examples/rainbow ;src_dir = lib/WS2812B/examples/demo ;src_dir = lib/SoilMoistureSensor/examples/demo ;src_dir = lib/ADS1115/examples/demo ;src_dir = lib/ML8511/examples/demo src_dir = lib/RFID_READER/examples/test_r200 ; プログラムのビルドアップロード -> $ pio run -e esp32 -t upload && pio device monitor ; クリーンビルド -> $ pio run --target clean [env:esp32] platform = https://github.com/platformio/platform-espressif32.git board = esp32dev framework = arduino monitor_speed = 115200 platform_packages = framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32#2.0.2 build_flags = '-DWIFI_SSID="hoge"' '-DWIFI_PASSWORD="fuga"' '-DDEBUG_MODE=1' [env:uno] platform = atmelavr board = uno framework = arduino monitor_speed = 115200 コーディング 通常はsrcフォルダ内にあるmain.cppでプログラムを記述しますが、先のビルド設定のように lib/xxxxx/examples/test 内のinoファイルを単体テストできたりします。C++ベースのライブラリを開発したい場合に便利です。 ...

公開: 2023年12月4日 · 更新: 2026年6月4日 · Toshihiko Arai

Arduino Unoで内蔵メモリEEPROMを使って状態を保存する方法

はじめに Arduino Unoでデータを保存するには、SDカードを使う方法のほかに、内蔵EEPROMへ保存する方法があります。EEPROMは容量こそ小さいものの、電源を切っても残したい設定値やスイッチ状態を保存するには扱いやすいです。この記事ではEEPROMの読み書き、2つのLED状態を1バイトにまとめるビット演算、タクトスイッチで状態を切り替える例をまとめます。 Arduino Uno R3のEEPROM EEPROM(Electrically Erasable Programmable Read-Only Memory)は電気的に消去でき、プログラムで書き換え可能な不揮発性メモリです。Arduino Uno R3で1024バイトのEEPROMが内蔵されています。わずか1kB程度のメモリではありますが、プリセット値やちょっとした状態保存であれば十分使えます。ちなみにArduino Uno R4ではEEPROMの値は8kBへ拡張されてます。 EEPROMの使い方 Arduino IDEではEEPROMが簡単に使えるようにライブラリが内蔵されています。スケッチでEEPROMを使う場合は下記ヘッダをインクルードします。 #include <EEPROM.h> 次のようにしてEEPROMのサイズを取得できます。 unsigned int eeprom_size = EEPROM.length(); Serial.println(eeprom_size); データを読み込むread() read() 関数を使ってEEPROMから保存されている値を読み込みます。address には0〜1023の範囲で値を指定します。 int value = EEPROM.read(address) データを書き込むwrite() EEPROMへデータを書き込むには write() 関数を使います。 int value = 16 EEPROM.write(address, value) ただしArduino Uno R3は8ビットマイコンですから、write()で書き込める値 value は8ビットになります。つまり0〜255までの値となります。それ以上大きい値を書き込む場合は分割してメモリへ保存するなどの工夫が必要となります。 他にもEEPROMライブラリには update() get() put() といった関数が存在しますが、ここで紹介した read() と write() の2つを使えば十分事足りります。 EEPROMは何度でも無制限に書けるメモリではないため、センサ値のように毎秒変わるデータを保存し続ける用途には向きません。今回のように、ボタン操作で状態が変わったときだけ保存する使い方なら、EEPROMの性質に合っています。 https://docs.arduino.cc/learn/built-in-libraries/eeprom 【実践】2つのLEDの状態を保存する 2進数を使って2つのLEDの状態を記録する LEDの状態保存には次のように2進数を使うと便利です。今後、状態管理が複数に増えたときもプログラムを完結に書くことができます。 10進数 二進数 LED1 LED2 0 0x00 オフ オフ 1 0x01 オフ オン 2 0x10 オン オフ 3 0x11 オン オン Arduinoとタクトスイッチ、LEDの配線 ここでは実際にArduino Unoを使って、タクトスイッチでLEDを点灯させ、その状態をEEPROMに書き込んで保存してみます。Arduinoとタクトスイッチ、LEDは次のように配線しました。抵抗は220Ω〜1kΩ程度で構いません。タクトスイッチの片側はGNDに接地し、もう一方をArduinoのデジタルピンへ接続させます。 ...

公開: 2023年7月24日 · 更新: 2026年4月30日 · Toshihiko Arai

物理ボタンを付けてRaspberry Piを安全にシャットダウンする方法

はじめに この記事では、Raspberry PiのGPIOに物理ボタンを取り付けて、ワンプッシュで安全にシャットダウンする方法を紹介します。 ヘッドレス運用でモニターやキーボードを繋いでいないRaspberry Pi向けの内容です。 Raspberry Piの電源をオフする場合にUSB電源コードをそのまま引っこ抜くと、運が悪い場合はSDカード内のOSが壊れる可能性があります(私もその経験あります)。かと言って、SSHでログインして $ sudo shutdown -h now を毎回実行するのも非常に面倒です。物理ボタンを付ければ、コードを抜くだけの感覚で安全に電源を落とせます。 ここで紹介する手順は次のとおりです。 Raspberry PiのGPIOピンに物理ボタンを設置 ボタンを監視するPythonコードを作成 ②をシステムサービスへ登録 記事の後半ではさらにLEDも追加して、Raspberry Piの電源オンオフ状態を分かりやすく工夫しました!ぜひ最後までご覧ください。 動画を再生 Raspberry PiのGPIOピンに物理ボタンを設置 押している間だけ導通するモーメンタリー型のスイッチ を使用しました。 このスイッチをRaspberry PiのGPIO27(物理番号13)とGround(物理番号14)に繋ぎます。 ボタンを監視するPythonコード 次に、適当な場所に shutdown_by_button.py としてボタンを監視するPythonコードを作成します。 #!/usr/bin/env python import RPi.GPIO as GPIO import os, time GPIO.setmode(GPIO.BCM) GPIO.setup(27, GPIO.IN, pull_up_down = GPIO.PUD_UP) # GPIO27--Button--GND def shutdown(channel): os.system("sudo shutdown -h now") GPIO.add_event_detect(27, GPIO.FALLING, callback = shutdown, bouncetime = 3000) while 1: time.sleep(100) 上記プログラムの内容はGPIO.add_event_detect でGPIOのイベントを検知し、shutdown 関数を呼び出して sudo shutdown -h now を実行させています。 ...

公開: 2023年7月20日 · 更新: 2026年5月30日 · Toshihiko Arai

Raspberry PiのSDカードを丸ごとコピーしてバックアップする方法、やり方

はじめに Raspberry PiのSDカードを丸ごとコピーしてバックアップする方法をご紹介いたします。この操作はRaspberry PiのUSBに別のSDカードを挿して行います。Raspberry Pi 4だけでなく、3など他のバージョンでも使える方法です。 SDカードの内容をそのままコピーするには色々な方法が考えられるかと思います。Raspberry PiへはSSHでログインしるので、CUIで動かせるものを探してました。はじめにddコマンドでコピーできないだろうかと考えましたが、このコマンドではSDカードが小さい容量になった場合は書き込めないようです。そこで「rpi-clone」というツールを発見。 「rpi-clone」ではSDカードの容量が変わっても問題なく丸ごとOSをコピー可能です。 この記事では「rpi-clone」を使ってRaspberry Pi OSを複製バックアップしていきます。 ちなみにGUI操作でしたら「SD Card Copier」というソフトウェアが良さそうです。 rpi-cloneのインストール Raspberry PiへSSHでログインし、 rpi-clone をインストールします。 $ git clone https://github.com/billw2/rpi-clone.git $ cd rpi-clone $ sudo cp rpi-clone rpi-clone-setup /usr/local/sbin これで rpi-clone が使える状態になりました。 SDカードのデバイス名を調べる 次にRaspberry PiのUSBへバックアップ用のSDカードを挿します。 以下の lsblk コマンドを実行してSDカードのデバイス名を調べます。 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 1 7.4G 0 disk |-sda1 8:1 1 256M 0 part /media/rpi-first-boot-wizard/boot `-sda2 8:2 1 7.1G 0 part /media/rpi-first-boot-wizard/rootfs mmcblk0 179:0 0 29G 0 disk |-mmcblk0p1 179:1 0 256M 0 part /boot `-mmcblk0p2 179:2 0 28.7G 0 part / ここでは sda がSDカードの名前であることがわかります。 他のデバイスと間違えないよう、サイズなどよく確認して十分に注意してください。 ...

公開: 2023年7月20日 · 更新: 2026年3月12日 · Toshihiko Arai

ESP32でADS1115を使う方法|配線図・I2Cアドレス・サンプルコード

はじめに この記事では、ADコンバータ ADS1115 を ESP32 で使うやり方をまとめています。 ADS1115 は 16ビット / 4チャンネル の A/D コンバータで、ESP32 と I2C で接続できます。ESP32 内蔵 ADC より分解能を上げたいときや、複数のアナログ入力を安定して読みたいときに使いやすいモジュールです。 この記事で分かることは次の3点です。 ESP32 と ADS1115 の基本配線 I2C アドレスの扱い 4チャンネル分のアナログ値を読むサンプルコード 先に要点 ESP32 では SCL = GPIO22、SDA = GPIO21 に接続すれば試しやすいです ADDR を GND に落とすと、I2C アドレスは 0x48 になります ADS1X15 ライブラリを使うと、4チャンネルの読み取りはかなり簡単です 配線を長く引くなら、I2C の安定性には少し注意が必要です つかうもの この記事で使ったものです。 ADS1115 ADS1115 は、I2C で扱える 4チャンネル 16ビットの AD コンバータです。配線が少なくて済み、PGA も使えるので、ESP32 の内蔵 ADC だけでは少し足りないときに便利です。 中華製品は安く買える反面、たまにはんだ不良で正常に動かない場合があります。私も 1ch と 2ch の信号線がショートしていて、トラブルになったことがありました。 ESP32 WayinTopさんから販売されている ESP32 を使用しました。技適マークも刻印されてますので、安心して国内で使えます。 ...

公開: 2023年7月4日 · 更新: 2026年4月20日 · Toshihiko Arai