MAX7219 搭載8×8マトリックス LED を4つ連結したモジュールを ESP8266 ESP-12E へSPI接続。一からプログラミングせずに、ESP Easyの MAX7219 プラグインを使って、WiFi操作が可能な 電光掲示板 を作りました。
MAX7219 8×8マトリックスLED
今回ふとしたことからスマート電光掲示板が必要になったので、手持ちのESP-12Eと8×8マトリックスLEDで作ることにしました。
8×8マトリックスLEDは一般的なMAX7219搭載のこのようなモジュール。LEDと基板はピンヘッダで繋がっています。
これから部品調達するのであれば、4つ繋がった状態のモジュールが手間も価格もリーズナブルなはずですが、今回はバラのモジュールをハンダ付けで連結しました。
このモジュールとESP-12EはSPI接続する必要があり、その結線は下図の通り。
実際には、マトリックスLED四隅のネジ穴ピッチの一部がESP-12Eとたまたま同じだったこともあり、4連マトリックスLEDの背面にESP-12Eを樹脂ネジで固定。ケースを自作するほどでもないので、そのままアセテートテープで背面を覆うように養生しました。
MAX7219プラグインのあるESP Easyバイナリは?
ESP EasyでマトリックスLEDを初めて使うので、プラグインページでMAX7219対応プラグインが収録されているバイナリを確認します。
Status: DISPLAY とあるので、ESP Easy のGitHubページでダウンロードしたmega版圧縮ファイルの中から、該当するバイナリファイルを取り出します。
1 |
1,044,160 byte Aug 22 20:19 ESP_Easy_mega_20230822_display_ESP8266_4M1M.bin |
ESP Easyの100を超えるプラグインがどのバイナリに入っているのかは、こちらのプラグイン一覧ページでも確認することができます。
ESP8266 ESP-12EにESP Easyを書き込み
ESP-12EをUbuntu 18.04母艦にUSB接続したら、Espressif社のGitHubから以前クローニングした esptool.py を使って書き込むのですが、まずその前に疎通確認と念の為、既存のフラッシュを削除処理します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
$ lsusb Bus 001 Device 011: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light $ sudo ./esptool.py --port /dev/ttyUSB0 --baud 115200 flash_id esptool.py v3.3-dev Serial port /dev/ttyUSB0 Connecting.... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: ##:##:##:##:##:## Uploading stub... Running stub... Stub running... Manufacturer: e0 Device: 4016 Detected flash size: 4MB Hard resetting via RTS pin... $ sudo ./esptool.py --port /dev/ttyUSB0 --baud 115200 erase_flash esptool.py v3.3-dev Serial port /dev/ttyUSB0 Connecting.... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: ##:##:##:##:##:## Uploading stub... Running stub... Stub running... Erasing flash (this may take a while)... Chip erase completed successfully in 4.6s Hard resetting via RTS pin.. |
続いてESP Easyバイナリを書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ sudo ./esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_size 4MB --flash_mode dio 0x00000 ~/Downloads/ESP_Easy_mega_20230822_display_ESP8266_4M1M.bin esptool.py v3.3-dev Serial port /dev/ttyUSB0 Connecting.... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: ##:##:##:##:##:## Uploading stub... Running stub... Stub running... Configuring flash size... Flash will be erased from 0x00000000 to 0x000fefff... Flash params set to 0x0240 Compressed 1044160 bytes to 693505... Wrote 1044160 bytes (693505 compressed) at 0x00000000 in 61.3 seconds (effective 136.2 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin... |
シリアルコンソールからWiFi接続指示
書き込みが正常に終了したらESP-12E上の RST ボタンを押してデバイス再起動、その様子をそのままシリアルターミナルで母艦から確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
613 : Info : INIT : Booting version: ESP_Easy_mega_20230822_display_ESP8266_4M1M, (GitHub Actions) mega-20230822 (ESP82xx Core 2843a5ac, ) 614 : Info : INIT : Free RAM:28936 615 : Info : INIT : Manual Reboot #3 - Restart Reason: External System 616 : Info : FS : Mounting... 641 : Info : FS ySerial 663 : Info : ESPEasy console using ESPEasySerial 664 : Info : INIT : I2C 664 : Info : INIT : SPI not enabled 665 : Info : Set Network mode: WiFi 769 : Info : WIFI : Set WiFi to STA 5247 : Info : Setup: Scan all channels 7436 : Info : E7438 : Info : ESPEasy console using ESPEasySerial 7439 : Info : INFO : Plugins: 55 [Normal][Display][No Debug Log] (ESP82xx Core 2843a5ac, NONOS SDK 2.2.2-dev(38a443e), LWI) 7442 : Error : WIFI : No valid wifi settings 7443 : Info : WiFi : WiFiConnected(), start AP 9733 : Info : WIFI : Set WiFi to AP+STA 10726 : Info : WIFI : AP Mode ssid will be Display with address 192.168.4.1 ch: 1 15107 : Info : Webserver: start 16451 : Info : WD : Uptime 0 ConnectFailures 0 FreeMem 18928 WiFiStatus 0 ESPeasy internal wifi status: DISCONNECTED 46452 : Info : WD : Uptime 1 ConnectFailures 0 FreeMem 19232 WiFiStatus 0 ESPeasy internal wifi status: DISCONNECTED |
初回は接続すべきWiFi情報が無いので、ESP Easy自身がAPになってクライアントからの接続を待ち受けます。
ESP Easyにはさまざまなコマンドが用意されており、シリアルターミナル経由でも利用可能なので、今回はこれを利用してWiFiの設定を済ませようと思います。
必要なコマンドは次の3つ。
- wifissid : 接続先SSID名設定
- wifikey : 接続先パスフレーズ設定
- wificonnect : 設定したWiFi情報を元に接続処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
>wifissid ######## Wifi SSID:######## OK >wifikey ********** Wifi Key:********** OK >wificonnect OK 200685 : Info : WIFI : DHCP IP: 10.200.200.9 (Display) GW: 10.200.200.1 SN: 255.255.255.0 DNS: 10.200.200.1 / (IP unset) s 200826 : Info : WIFI : Disconnected! Reason: '(8)' 200928 : Info : Reset WiFi. 203218 : Info : WIFI : Disconnected! Reason: '(1)' 203319 : Info : Reset WiFi. 205610 : Info : WIFI : Set WiFi to OFF 205926 : Info : WIFI : Set WiFi to STA 206031 : Info : WIFI : Connecting ######## ##:##:##:##:##:## Ch:6 (-53dBm) WPA2/PSK attempt #4 207047 : Info : WIFI : DHCP IP: 10.200.200.9 (Display) GW: 10.200.200.1 SN: 255.255.255.0 DNS: 10.200.200.1 / (IP unset) s 207161 : Info : WIFI : Connected! AP: ######## (##:##:##:##:##:##) Ch: 6 Duration: 974 ms |
APモードのESP Easyへ接続してWiFi設定するよりも、簡単に済ませることができました。
次ページでは、ESP EasyのWebUIを開いて、MAX7219マトリックスLEDの表示設定へと進みます。