ESP32でESP-NOWを使って通信してみよう

はじめに この記事では、M5StickC PLUS のボタンを押すと ESP32 のLEDが点滅するデモを通じて、ESP-NOWによるデバイス間通信の実装方法を解説します。ESP-NOWはWiFiアクセスポイント不要・相手のMACアドレスだけで通信できる手軽な無線プロトコルで、BLE(Bluetooth Low Energy) と比べてもコードがシンプルです。M5StickC PLUSとESP32開発ボードがあれば、この記事のコードをそのまま動かせます。 ESP-NOWとは ESP-NOWをもう少し詳しくみてみます。こちらにESP-NOWのドキュメントがありますので、目を通しておくと良いでしょう。 ESP-NOW ドキュメントを翻訳すると、ESP-NOWは次のように説明されています。 ESP-NOWは、Espressifによって定義されたコネクションレス型Wi-Fi通信プロトコルです。アプリケーションデータはベンダー固有のアクションフレームにカプセル化され、接続なしで1つのWi-Fiデバイスから別のWi-Fiデバイスへ送信されます。CBC-MACプロトコル(CCMP)を使用したCTRでアクションフレームを暗号化してセキュリティを確保します。スマートライト・リモコン・センサなどで広く使われています。 TCPのようなハンドシェイクがないためデータ到達の保証はありませんが、高速かつ省電力な通信を実現できます。単純な送受信であれば使う関数はわずかで、すぐに動かせます。 プログラミング M5StickC PLUSを送信機、ESP32を受信機として実装します。送信するには受信機のMACアドレスが必要なので、まず受信側のプログラムを書き込んでMACアドレスを確認してください。 受信側のプログラム(ESP32) Serial.println(WiFi.macAddress()); を実行することで、ESP32のMACアドレスをシリアルモニタへ表示します。表示されたMACアドレスをメモして下さい。 ESP-NOWを使ってデータを受信するには、esp_now_init() で初期化し、esp_now_register_recv_cb(onReceive) でデータ受信時のコールバックを登録します。WiFiモードは WIFI_STA(ステーションモード)を指定します。 #include <esp_now.h> #include <WiFi.h> const int LED_PIN = 13; bool ledState = false; void toggleLed() { if (ledState) { ledState = false; digitalWrite(LED_PIN, LOW); } else { ledState = true; digitalWrite(LED_PIN, HIGH); } } void onReceive(const uint8_t* mac_addr, const uint8_t* data, int data_len) { char macStr[18]; snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); Serial.println(); Serial.printf("Last Packet Recv from: %s\n", macStr); Serial.printf("Last Packet Recv Data(%d): ", data_len); for (int i = 0; i < data_len; i++) { Serial.print(data[i]); Serial.print(" "); if (data[i] == 222) { toggleLed(); } } } void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); Serial.println(WiFi.macAddress()); // このアドレスを送信側へ登録します WiFi.mode(WIFI_STA); WiFi.disconnect(); if (esp_now_init() == ESP_OK) { Serial.println("ESP-Now Init Success"); } esp_now_register_recv_cb(onReceive); } void loop() { } 送信側のプログラム(M5StickC PLUS) slaveAddress を、受信機のMACアドレスに書き換えてください。esp_now_peer_info_t で送信先の情報を登録し、esp_now_register_send_cb(onSend) で送信完了イベントを登録します(不要なら省略可)。データの送信は esp_now_send(slaveAddress, data, sizeof(data)) だけです。 ...

公開: 2023年6月23日 · 更新: 2026年5月25日 · Toshihiko Arai
LANケーブルを自作する方法|RJ45のかしめ方とArduino配線で使うときの注意点

LANケーブルを自作する方法|RJ45のかしめ方とArduino配線で使うときの注意点

はじめに この記事では、CAT5E の LAN ケーブルと RJ45 プラグを使って、LAN ケーブルを自作する手順をまとめています。 前半では、被覆を剥くところからプラグをかしめて LAN テスター で確認するところまでを写真付きで説明します。後半では、完成した LAN ケーブルを Arduino や ESP32 とセンサの間に使い、I2C や 1-Wire を長めに引き回したときに気づいた注意点も整理します。 こんなときに読む記事です。 LAN ケーブルを自分で作りたい RJ45 プラグの配線順を確認しながら作業したい Arduino や ESP32 のセンサ配線を LAN ケーブルでまとめたい 先に要点 一般的なストレート配線なら T568B の順番で両端をそろえればOKです 自作後は LAN テスター で 1 本ずつ確認した方が確実です I2C を長く引く用途では CAT5E だと不安定になることがありました 1-Wire は 4.7kΩ の外部プルアップ抵抗を入れると安定しやすくなりました LANケーブルの作り方 まずは CAT5E の LAN ケーブルを用意します。 ニッパーなどを使って、LAN ケーブルの被覆を 2cm ほど剥き、ツイストペアをほぐします。 ストレートケーブルとして使うなら、T568B の順番にそろえるのが一般的です。下図の並びで作業すると分かりやすいです。 茶色 白茶 緑 白青 青 白緑 オレンジ 白オレンジ 緑 と 青 の並びだけ少し迷いやすいので、ここは途中で何度か見直した方が安全です。 ...

公開: 2023年5月13日 · 更新: 2026年4月20日 · Toshihiko Arai
電磁弁とESP32で水道のオンオフを制御してみた

電磁弁とESP32で水道のオンオフを制御してみた

はじめに この記事では、12Vの電磁弁をESP32からオンオフする配線例をまとめます。リレーモジュールで電磁弁の電源を切り替え、USB 5VをDC-DCコンバータで12Vへ昇圧することで、テスト環境ではUSB電源ひとつで動かせました。 水道や散水まわりに使う場合は、GPIOの制御だけでなく、電磁弁の流向、12V側の電流、ケースの防水がつまずきやすいところです。ここでは、実際にホースをつないで動作確認した流れと、ケースに収めるときの注意点まで整理します。 先に要点 使った電磁弁は12Vで約500mA、つまり約6Wの負荷でした ESP32から直接電磁弁を動かさず、リレーモジュールで12V側をオンオフします USB 5Vから昇圧する場合は、ESP32、リレー、電磁弁を合わせた電流容量に余裕を見ます 電磁弁には水を流す向きがあり、IN側を蛇口側へつなぎます 屋外や水まわりで使う場合は、防水ケース、コネクタ、配線の引き込みまで別途対策が必要です 電磁弁の使い方 電磁弁を購入したは良いものの、説明や情報がほとんどなく困ったものでした。手探りで使い方を把握しました。 まず電磁弁の極性ですが、下の写真のように 「+」シールを貼ってある方にプラスを、反対はマイナスになるように12V電源をつないで ください。 こちらの動画にあります通り、電磁弁を通電させると 12V電圧で大体500mA程度の消費電流 になります。 動画を再生 ただし、電磁弁をオンオフさせても開閉音は鳴りません。上の動画のカチカチ音はリレーの音です。 電磁弁がちゃんと開閉されているかどうかは、実際にホースを繋いで水を流すことで確認するしかありません。 ここで 電磁弁へホースをつなぐ際に、水を流す方向があります のでご注意ください。下の写真の 黄色いテープで「IN」と書かれている方を蛇口側へつなぐ ようにします。電磁弁に電圧をかけていない場合は、止水されますのでノーマリークローズです。電磁弁を通電させると、左側から供給された水が流れるようになります。 ちなみに、動画で使っている安定化電源はこちらのものです。0V〜30Vまで10Aの出力で可変できます。出力用のオンオフスイッチも付いていて便利です。また、電流値がすぐに分かるのも安定化電源のメリットですね。 電磁弁のネジ穴はG1/2という規格なので、散水用ホースへつなぐには変換アダプタを用意しましょう。 電磁弁とESP32の配線 さて、ESP32を使って実際に電磁弁を制御してみました。電磁弁のオンオフはリレーモジュールを使うと簡単にできます。また、電磁弁とESP32の電源をUSBケーブルひとつで済ませたかったので、DC-DCコンバーターを使って5Vを12Vへ昇圧させることにしました。 電磁弁を動かすには、12V x 500mAで6W必要 なので、5V側では単純計算で1.2A以上が必要です。ここにESP32のWiFi動作、リレーモジュール、DC-DCコンバーターの変換ロスが乗るため、電源容量はギリギリにしない方が安心です。今回の動作テストでは、2.4AのUSB電源ひとつで動かすことができました。 配線は少し複雑ですが、役割を分けると分かりやすいです。 ESP32のGPIOは、リレーモジュールのINを制御する リレーモジュールは、電磁弁へ流す12Vをオンオフする DC-DCコンバーターは、USB 5Vを電磁弁用の12Vへ昇圧する リレーモジュール自体の端子やCOM/NO/NCの考え方を先に確認したい場合は、リレーモジュールの使い方 も合わせて読むと配線の意味を追いやすいです。 ESP32で電磁弁を制御するサンプルプログラム ESP32で電磁弁を制御するプログラム例です。配線は少しややこしかったですが、ソースコード自体はリレーモジュールを動かす要領ですので非常に簡単ですね! /** * @date 2022-11-25 * @author Toshihiko Arai * @copyright https://araisun.com * @brief リレーモジュールを使って電磁弁(12VDC)を制御するデモ */ #include <Arduino.h> /** * @brief 電磁弁 <--> Relay <--> ESP32 の配線 * DC+ <--> 5V * DC- <--> GND * IN <--> GPIO14 * 電磁弁+ <--> COM * 12VDC <--> NO */ #define TRG_PIN 14 void setup() { Serial.begin(115200); pinMode(TRG_PIN, OUTPUT); } void loop() { digitalWrite(TRG_PIN, HIGH); delay(2000); digitalWrite(TRG_PIN, LOW); delay(5000); } ESP32のWiFi機能を使えば、下の動画のように遠隔操作で電磁弁の制御ができます。植物の栽培などに活用できますね^^ ...

公開: 2022年11月26日 · 更新: 2026年5月12日 · Toshihiko Arai
ESP32へ書き込みエラー・MacBook 2022でconnectできない・自動書き込みに失敗したときの解決方法

ESP32へ書き込みエラー・MacBook 2022でconnectできない・自動書き込みに失敗したときの解決方法

はじめに 今までMacBookでESP32の開発を行ってきたのですが、Macbook Air 2022に乗り換えたらESP32への自動書き込みに失敗するようになってしまいました。BOOTボタンを押しながらスケッチをアップロードすれば成功するのですが、ESP32本体をケース内に収めたときにBOOTボタンを押せず、困ったことになります。この件に関して色々調べたところ解決しましたので、その方法をお伝えします。 Macbook Air 2022でESP32へ自動書き込みに失敗する解決方法 私はVisual Studio CodeにPlatformIO IDEを入れて、ArduinoやESP32をプログラミング&ビルド&アップロードしているのですが、MacBook Air 2022に乗り換えてから急に、ESP32へスケッチをアップロードできなくなりました。「古いMacBookでスケッチアップロードしなきゃならないのかよー」と嘆いていましたが、解決方法が見つかりました! ズバリ!、 ESP32のENとGNDの間に10uFの電解コンデンサを配線 すると解決します!下図のようにENピンに電解コンデンサのプラス極を繋げるようにしてください。 頻繁に使う場合は、下の写真のようにESP32の基板に直接コンデンサをはんだ付けしておくと便利です。電解コンデンサの耐圧は16Vあれば十分でしょう。 ESP32のSoC(チップ)の左上端子がGNDでしたので、下の写真のようにもっと攻めたはんだ付けも可能ですね!はんだ付けに自信のある方は試してみてください。 ちなみにENピンをLOWにするとESP32の電源がオフになり、HIGHになったら電源がオンなるそうです。なぜコンデンサを挟むと安定してスケッチがアップロードできるのか詳しいことは分かりませんが、とにかく同じお悩みの方はぜひ試してみてください!^^ 関連アイテム ESP32 DevKitC 10uF 電解コンデンサ USB Type-C データケーブル

公開: 2022年11月25日 · 更新: 2026年2月25日 · Toshihiko Arai
ESP32でHTTPClientを使ってウェブサーバーにGET、POSTするやり方|HTTPSアクセスまで

ESP32でHTTPClientを使ってウェブサーバーにGET、POSTするやり方|HTTPSアクセスまで

はじめに ESP32からウェブサーバーへHTTPリクエストを送るときは、HTTPClient というライブラリを使うと拍子抜けするほど簡単に書けます。ポイントは、GETでもPOSTでも通信の手順(型)がほとんど同じだということです。まずその型を頭に入れてしまえば、あとは送る中身を変えるだけで応用が効きます。 やることは、接続を開いて(http.begin)、リクエストを送り(http.GET() か http.POST())、返ってきた本文を受け取り(http.getString())、接続を閉じる(http.end())——この4手です。GETとPOSTの違いは、真ん中で呼ぶメソッドと、POSTのときだけ送信する本文を渡すかどうかだけ。この記事では、テスト用のダミーサーバーを用意したうえで、GET・POST・HTTPSの順に見ていきます。 開発環境 この記事は、次の環境で動作を確認しています。 項目 値 ボード ESP32-DevKitC IDE PlatformIO ファームウェア arduino-esp32 #2.0.2 HTTPClient ver 2.0.0 テスト用のダミーサーバーを用意する いきなり本番のサーバーに投げる前に、手元でリクエストを受け止めてくれる小さなサーバーがあると開発がぐっと楽になります。Pythonの標準ライブラリだけで書けるので、次の構成でファイルを2つ用意します。 . ├── dummy_root │ └── status.json └── dummy_server.py dummy_server.py は、/status へのGETにJSONを返し、/data へのPOSTを受け取って中身をログに出すだけの内容です。 from http.server import HTTPServer, BaseHTTPRequestHandler import os import re import logging import socket host_list = socket.gethostbyname_ex(socket.gethostname()) lan_address = host_list[2][1] dirname = os.path.dirname(__file__) server_ip = "0.0.0.0" server_port = 9998 lan_url = "http://{}:{:d}".format(lan_address, server_port) url = "http://{}:{:d}".format(server_ip, server_port) os.chdir(dirname + "/dummy_root/") def load_file(path): with open(path, mode='r') as f: s = f.read() return s.encode('utf-8') class S(BaseHTTPRequestHandler): def do_GET(self): m = re.match(r'^/status$', self.path) if m != None: self.send_response(200) self.send_header('Content-type', 'application/json') self.end_headers() self.wfile.write(load_file("status.json")) def do_POST(self): print('======================= POST ======================='); print(self.path) m = re.match(r'^/data$', self.path) if m != None: content_length = int(self.headers['Content-Length']) post_data = self.rfile.read(content_length) print('======================= HTTP Request ======================='); logging.info("POST request,\nPath: %s\nHeaders:\n%s\n\nBody:\n%s\n", str(self.path), str(self.headers), post_data.decode('utf-8')) self.send_response(200) self.send_header('Content-Type', 'application/json') self.end_headers() self.wfile.write('{"status":"ok"}'.encode('utf-8')) def web_server(): logging.basicConfig(level=logging.INFO) httpd = HTTPServer(('', server_port), S) logging.info('Starting httpd...\n') httpd.serve_forever() if __name__ == "__main__": print(lan_url) print(url) web_server() 冒頭の gethostbyname_ex は、起動時にLAN側のURLを表示するための便宜的な処理です。環境によってはLANのIPアドレスをうまく拾えず別の値が出ることがあるので、ESP32側から接続するアドレスは、後述のコードのようにPCの実際のIPアドレス(ipconfig や ifconfig で確認できます)を直接指定するのが確実です。status.json の中身はごく簡単なもので構いません。 ...

公開: 2022年10月31日 · 更新: 2026年7月3日 · Toshihiko Arai

【ESP32】MH-Z19CセンサでCO2濃度を測定する

はじめに この記事では、ESP32 と MH-Z19C CO2センサ を UART で接続し、CO2濃度を読み取る方法をまとめます。配線、ライブラリ、サンプルコード、ゼロ点校正まで確認したあと、UART通信の基本も整理します。 MH-Z19C はUARTまたはPWMで値を取り出せますが、この記事ではライブラリを使ったUART方式で進めます。ESP32側ではハードウェアシリアル2を使い、センサの TX と RX の向きを間違えないことが重要です。 こんなことをやります。 CO2センサ(MH-Z19C)とESP32でCO2濃度の測定 CO2センサの校正 気象庁のCO2濃度データをグラフ化 MH-Z19Cで使われているUART(シリアル通信)の解説 先に要点 ESP32では、MH-Z19Cの TX を GPIO16 (RX2)、RX を GPIO17 (TX2) へつなぎます サンプルコードでは mhz19_uart ライブラリを使い、getCO2PPM() でCO2濃度を読みます ゼロ点校正は環境の影響を受けるため、やみくもに実行せず用途に合わせて扱います CO2濃度の話は換気の目安として扱い、この記事ではセンサの使い方と実験記録を中心にします つかうもの はじめに、この記事で使うものをご紹介します。 MH-Z19C 秋月電子通商で販売しているMH-Z19Cを使いました。 MH-Z19Cセンサは、 赤外線を使って空気中のCO2濃度を測定 します。MH-Z19Cセンサからデータを読み取るには、UART通信または、PWMで値を読み取る方法があります。本記事ではもっとも簡単な方法として、既存のライブラリを使ってUART方式でMH-Z19からCO2濃度を読み取る方法をご紹介いたします。 MH-Z19Cの概要 MH-Z19Cでは、UARTまたはPWM信号を読み取ってCO2濃度のデータを読み取ります。 今回はライブラリを使用しますが、ライブラリの仕組みとしてはUART通信でデータを読み取ってます。UARTについて記事の最後でくわしく解説してます。 MH-Z19Cの仕様 項目 値 電源電圧 5V 測定レンジ 400~5000ppm 消費電流 40mA以下、最大125mA インターフェース電圧 3.3V 出力 シリアルポート(UART、TTLレベル3.3V)、PWM MH-Z19Cライブラリのインストール MH-Z19CとUARTで簡単にやり取りできるライブラリを使用します。こちらの「nara256/mhz19_uart」を使わせてもらいました。 https://github.com/nara256/mhz19_uart 上記のページからzipでダウンロードして解凍してください。それをArduinoのライブラリディレクトリへ移動すればOKです。 私はPlatform IOで開発してますので、ディレクトリ構造は次のように配置しました。 . ├── include │ └── README ├── lib │ ├── README │ └── mhz19_uart │ ├── MHZ19_uart.cpp │ ├── MHZ19_uart.h │ └── examples │ └── demo │ └── demo.ino ├── platformio.ini ├── src │ └── main.cpp └── test └── README MH-Z19CだけでなくMH-Z19Bでも使えます。また、このライブラリはArduinoとESP32のどちらでも使うことができます。UART通信ですので、Arduinoの場合はソフトウェアシリアルを、ESP32の場合はハードウェアシリアルを使用します。配線だけ間違えないように注意してください。 ...

公開: 2022年5月21日 · 更新: 2026年4月29日 · Toshihiko Arai

【Arduino】リアルタイムクロック(DS3231)で現在時刻の表示

こんなこと、やります。 ArduinoでリアルタイムクロックDS3231を使う リアルタイムクロックに現在時刻をセットする シリアルモニタで現在時刻の表示 液晶ディスプレイで現在時刻の表示 DS3231は温度補償付きの高精度リアルタイムクロック(RTC)で、Arduinoから現在時刻を読み出して時計や記録のタイムスタンプに使えます。ポイントは、最初に一度だけ現在時刻を書き込んでおけば、あとはモジュール上のボタン電池でその時刻が保持され続けることです。この記事では、ライブラリのインストールとI2C配線から、シリアルモニタでの表示、さらにI2C接続のLCDに時刻を表示するところまでを順に扱います。 DS3231ライブラリのインストール Arduino IDEで簡単にDS3231を扱えるように、ライブラリをインストールしましょう。 Ardino IDEを立ち上げて、メニューから「Sketch」→「Include Library」→「Managed Libraries…」を選択し、「DS3232RTC」で検索して次のライブラリをインストールしてください。 「依存関係のライブラリをインストールしますか?」と問われますので、「Install all」を押します。 https://github.com/JChristensen/DS3232RTC Arduinoとリアルタイムクロックの配線 Arduinoとリアルタイムクロックの配線を次の通り行います。 Arduino UNOでは、SDAとA4、SCLとA5は導通してますので、A4、A5ピンを使ってもらっても大丈夫です。I2C通信の配線やアドレスの考え方は、ESP32でADS1115を使う方法|配線図・I2Cアドレス・サンプルコード も参考になります。 ArduinoとDS3231のプログラミング ArduinoとDS3231のプログラミングを行っていきます。RTCから現在時刻を取得するには、 一度だけ現在時刻をセットしてあげる必要 があります。 現在時間を書き込む 内容を現在時刻に合わせて書き換えてください。 #include <DS3232RTC.h> void setup() { setTime(15, 21, 0, 22, 1, 2022); RTC.set(now()); } void loop() { } 時刻はsetTime(時、分、秒、日、月、年の順で入力) で指定します。プログラムを一度だけArduinoで実行し、リアルタイムクロックに現在時刻を記録させます。 シリアルモニタで現在時刻を表示する シリアルモニタで現在時刻を表示させてみましょう。 #include <DS3232RTC.h> void setup() { Serial.begin(115200); } void loop() { tmElements_t tm; RTC.read(tm); Serial.print(tm.Year + 1970, DEC); Serial.print('/'); Serial.print(tm.Month, DEC); Serial.print('/'); Serial.print(tm.Day, DEC); Serial.print(' '); Serial.print(tm.Hour, DEC); Serial.print(':'); Serial.print(tm.Minute,DEC); Serial.print(':'); Serial.println(tm.Second,DEC); delay(1000); } こんな感じで、シリアルモニタに現在時刻が表示されれば成功です。 ...

公開: 2022年1月22日 · 更新: 2026年6月3日 · Toshihiko Arai

【Arduino】サーミスタで温度測定する

この記事では、ArduinoとNTCサーミスタを使って温度を測定する方法をまとめます。まず分圧回路で抵抗値を読み取り、B定数の近似式で温度へ変換し、精度を上げたい場合は3点測定からスタインハート式で校正します。温度制御や環境センサを作る前に、サーミスタの計算と誤差の出方を確認するための記事です。 こんなこと、やります。 サーミスタの使い方、計算方法を学ぶ Arduinoとサーミスタを使って温度の測定 サーミスタの温度校正 サーミスタ ここではサーミスタについて解説します。 サーミスタとは サーミスタとは、温度変化にともなって抵抗値が変化する抵抗器です。 温度のthermalと抵抗器のresistorを合わせ、サーミスタという名称になりました。 温度センサに使用されるサーミスタは、 NTC(negative temperature coefficient)といって、温度が上昇すると抵抗値が減少する タイプのものです。 温度が上昇すると抵抗値が上昇するものは、PTC(positive temperature coefficient)と呼び、ヒューズの役割として使ったり、一定温度を保つPTCヒーターに利用されます。 ちなみにこちらのPTCヒーターを使ってヨーグルトメーカーをつくったこともあります。 本記事では、温度センサとしてよく使われるNTCタイプのサーミスタを扱います。 NTCサーミスタの特性・近似式 サーミスタは、温度変化に対して抵抗値が変わる素子 であることは説明しました。しかし、サーミスタと温度と抵抗の関係は非線形です。よって、サーミスタの抵抗値から温度を得るためには、NTCサーミスタの特性を近似させた次式を利用します。 $$ R=R_0exp{B(\frac{1}{T}-\frac{1}{T_0})} \tag{1} $$ ここで、Bは B定数 と呼ばれるもので、サーミスタのデータシートに掲載されてます。 また、 Tの単位はケルビン になります。摂氏温度を取得するには次式で変換します。 $$T(K)=t(℃)+273.15 \tag{2}$$ さて、式1をTについて展開すると次のとおりです。 $$\frac{1}{T} = \frac{1}{T_0}+\frac{1}{B}ln\frac{R}{R_0} \tag{3}$$ 式3の逆数をとれば、Tについて算出できます。 さらに高精度で近似させる「スタインハート式」というものがありますが、式3でも実用的な温度測定ができますので「スタインハート式」については省略します。 必要なパラメータ(103JT-050) サーミスタで温度測定に必要なパラメータを確認します。今回使用するサーミスタは103JT-050ですので、 データシートより各パラメータは次のとおりになります。 項目 値 備考 B定数 3435K ±1%(25℃の時) (T_0) 273.15K 0℃の時 (R_0) 27.7kΩ 0℃の時 (R_{25}) 10kΩ ±1%(25℃の時) 抵抗・温度特性のシミュレーション サーミスタ103JT-050のデータシートから、理論値をプロットしてみました。また、式1の近似式と103JT-050のパラメータから抵抗値を計算し、 抵抗と温度特性のシミュレーション をしてみました。 次のグラフは、 サーミスタ103JTの抵抗・温度特性における、理論値と近似値の関係 を表したものです。 さらに、0℃以上に絞ってみてみます。すると下図のとおり、かなり高い精度で近似できることが分かりました。 ...

公開: 2021年10月11日 · 更新: 2026年4月30日 · Toshihiko Arai

M5StickC PLUS BLACK!?黒くぬれ!

はじめに この記事では、 M5StickC PLUS を分解し、ケースをマットなブラックに塗装する までの流れをまとめます。背面のネジを外してケースを分けるとブザーと内蔵バッテリーが現れるので、 細い配線を切ってしまわないようにする手順 と、 基板側を傷めないようにケースだけを塗装する考え方 が中心です。 塗装には金属やプラスチックにも乗りやすい シリコンラッカースプレー(つや消し黒) や、 粒子で染め上げるタイプの染めQ を選んでいます。クロスバイクに取り付けても浮かないトーンに仕上がりました。M5StickC PLUSをカスタムしてみたい方は、ぜひ最後まで読んでみてください。 M5StickC PLUSの分解 M5StickC PLUSのケースは、 背面にある2つの六角ネジ で固定されています。六角レンチを使ってネジを外すと、上下にケースがパカっと分かれます。 ここで気をつけたいのが、 ブザーがケース側に貼り付いている という点です。基板とブザーは細い導線でつながっているので、ケースを引き剥がすときに 配線が引っ張られて切れないように、ゆっくり開いて ください。 塗装の段階では、 ケース単独の状態にしてから吹き付ける のが基本です。安全のため、次のいずれかの方法でブザー・配線・基板・バッテリーを塗装範囲の外に退避させてください。 おすすめ: ブザーをケースから慎重に剥がし、基板側にまとめて 塗装エリアの外 に置く(両面テープ等で貼られているだけなので、薄いヘラなどでゆっくり浮かせれば剥がせます)。 どうしてもブザーをケースから外したくない場合: ブザー本体・導線・基板・バッテリーをマスキングテープやアルミホイルで 完全に養生 し、ケースの外側へ逃がした状態で固定する。導線が引っ張られない長さを確保し、 通電せずに(電源OFF) 作業する。 いずれの場合も、塗料のミストや溶剤が電子部品やバッテリーに付着しないよう、 塗装対象はケース外装のみ という状態を作ってから吹き付けます。 内蔵バッテリーは120mAhのリチウムポリマー ケースを開けると、 120mAhのリチウムポリマー電池 が現れます。M5StickC PLUSのコンパクトな筐体に収めるにはこれが妥当な容量でしょう。 リチウムポリマー電池は 熱や物理的な圧力に弱い ため、分解時には次の点に注意します。 バッテリーのフィルムを傷つけたり、刺したりしない 塗装時に熱がこもらないよう、バッテリーは基板から外せる場合は外す(コネクタを抜く) 塗料の溶剤がバッテリーや基板に付着しないよう、 ケースだけ単独で塗装 する 長時間使うためには容量の大きいモバイルバッテリーを併用するのが現実的です。USB Type-Cで給電できる外部バッテリーを用意しておくと、屋外での運用がぐっと楽になります。 謎のG25とG38ピン 分解してみて気になったのが、 基板上に出ている「G25」と「G38」のランド です。データシートを見てもこのピンの用途ははっきり書かれていません。 もし未使用ピンであれば、ハンダ付けして GPIOを増設 できる可能性があります。今のところ既存のGroveコネクタやI2Cで間に合っていますが、将来センサを追加したくなったときの逃げ道として覚えておくと便利です。 ...

公開: 2021年7月26日 · 更新: 2026年5月29日 · Toshihiko Arai

はじめてのBLE通信、iOSからESP32のLチカ

はじめに この記事では、 iPhone(iOS)から ESP32 へ BLE 経由で命令を送り、ESP32 につないだ LED を点灯・消灯させる ところまでを作ります。iOS 側は CoreBluetooth、ESP32 側は Arduino IDE で書いた BLE Server の最小構成です。 必要なものは、ESP32 開発ボード(NodeMCU-32S や ESP32-DevKitC など)、LED、1kΩ 程度の抵抗、ブレッドボードと配線材、それに iPhone とビルド用の Mac です。配線は GPIO13 → LED のアノード → LED のカソード → 抵抗 → GND の順でつなぎます。 このあと BLE の用語を一通り整理し、サービス・キャラクタリスティック・UUID といった「相手を見つけて値を渡す」しくみを確認したうえで、ESP32 と iOS のサンプルコードを並べていきます。BLE の概念にすでに馴染みがあれば、Bluetooth Lチカプログラム まで読み飛ばしても構いません。 先に要点 ESP32 をペリフェラル(BLE Server)、iPhone をセントラル(BLE Client)として扱います iPhone のボタンが押されたら "0" または "1" の文字列を BLE Write で送り、ESP32 側で GPIO13 の HIGH/LOW を切り替えます 接続には サービス UUID と キャラクタリスティック UUID の2つが ESP32 側と iOS 側で一致している必要があります ESP32 から iOS へ値を返したい場合(センサ値などの Notify 送信)は、続編の ESP32 から iOS へ BLE でデータを送信する でまとめています Arduino IDE で ESP32 を書き込めるところまで進めていない場合は、先に ESP32 で L チカするまでの設定 を済ませておくと進めやすいです 「Bluetooth」名前の由来 Bluetoothは直訳すると 青い歯 です。その由来は10世紀のデンマークとノルウェーの王様の「Harald Blåtand Gormsen」の名前から来ているそうです。Blåtandを英語に翻訳するとBluetoothなのです。Harald王は北欧を統一した王様で、乱立する無線通信規格も Harald王のようにBluetoothで統一したいという願いが込められてます。 ...

公開: 2021年7月14日 · 更新: 2026年5月28日 · Toshihiko Arai