ESP8266(ESP-WROOM-02) webサーバー

ESP8266も大分枯れてきたデバイスと思いますが探し方が悪いのかUIを含めて当サイトで使ってみたいという作例がなかなか見当たりません。
WiFiマイコンということで単純に遠隔で何かをオン、オフする用途を想定してさらに最低限有ったほうがいいと思われる機能を含めてweb情報を参考にwebサーバーのベースを作成してみました。
内容については当サイトも8266.beginなので保証しかねます。

環境

ESP-WROOM-02 Arduino IDE1.8.5 + esp8266 v2.4.1 Raspberry Pi3

WiFi

WiFiは固定IP、STA modeとしています。
ローカル内の使用を想定しているため固定IPで運用をします。
名前解決は内部のDNSサーバーまたは/etc/hostsを利用しています。

Arduino OTA,SPIFFS

webサーバーとして運用するにあたり外せない機能としてはArduino OTA,SPIFFSがあります。

特にシリアルでデバッグなどを必要としない限り設定をしてしまえばWiFi経由でスケッチやデータをアップロードできるのでこれは欠かせませんね。
またindex.htmlもスケッチ内に置く必要も無いためページの作成も効率が上がります。(見栄えの良いページを作るとなるとこれはこれで難しくなります!)

sleep

sleepはlight sleep modeを設定
デフォルトはModem-SleepのようですがLight-Sleepにしても今回の用途では全く変わりないように感じられます。
正確な電流値は測ってはいませんが簡易なUSB電流計では約半分(100mA->50mA)くらいの値を示します。結果はモジュールの温度でも判別がつくかと思います。あきらかに温度が下がっているのがわかります。
sleep modeを設定していてもloop()内でsleepに入るタイミングが無いとsleep動作になりません。そのためdelay(1)を挿入しています。

NTP

NTPはこちらのページを参考にしています。ESP8266 (ESP-WROOM-02) でNTP(時刻合わせ)をするライブラリ。(Timeライブラリと連携して)
現時点では特に時刻を設定しているものは無いのですが今後活用する機会もあるということでNTPを動かしています。
時刻合わせは24時間に1回問い合わせをしています。但しリセットの度に問い合わせをすることになるので常時動いているPiをNTPサーバーに仕立ててローカル内で時刻合わせをしています。

// ntp
  setSyncInterval (86400); // 24h(86400sec)
  setTimeServer("192.168.0.115"); // local server
  ntp_begin(2390); // port 2390

またNTPは稼働していますがシリアル送りはwebサーバーのパフォーマンスに影響が出るため確認が済んだらシリアルへの送りは停止しています。

画像表示

画像表示については特に必須では無いのですが無いよりは有ったほうが気運が高まる?もんです。
という訳でこちらのページを参考にしてみました。[作業ログ]ESP8266をAP・Webサーバーとして使ってみる

画像はこちらのサイトから頂きました。(Thanks)
マップラボ-地図アイコンを無料ダウンロード maplab

画像をアップロード、表示するためにSPIFFSが必要です。
画像はgif,png,jpgで確認しています。
index.htmlから”/img1/”をアクセス、SPIFFSでファイルをオープンserver.streamFileでブラウザに渡します。
小さい画像ならば表示速度も問題ないと思います。アニメーションgifは少し遅い

setup()で関数を作成
server.on (“/img1/”, onImg1);

void onImg1() {
  SPIFFS.begin();
  File imgFile = SPIFFS.open("/shirakawago216.gif", "r");
  server.streamFile(imgFile, "image/gif");
  imgFile.close();
  server.send(200, "text/html", html);
}

index.html

index.htmlと画像はSPIFFSでアップロードします。

ボタンは少し見栄えの良いものをということでこちらのページを参考にしました。
WIFI-TNGとESP-WROOM-02で始めるWIFI Arduino
ボタンをクリックすると色が変わります。オフをクリックすることで元の色に戻ります。
JavaScript入門を少し読みました。
但しJavaScriptはクライアントサイドの実行になるので再読込やほかのデバイス、ブラウザからの実行では同期が取れません。
日付時刻表示は8266の時計ではなくクライアントの時計になります。
JavaScriptはこちらのサイトから(現在の日時を表示する)表示が動いてしまうので0値だけ追加しています。

sample esp8266.ino
sample index.html

ESP8266(ESP-WROOM-02)開発ボードの作成

現在はESP8266の後継品ESP32が主流かと思います。ESP32はピン数が多いので用途によってはピン数の少ないESP8266のほうが扱いやすいかもしれません。
ESP8266に関してはnodemcu(ESP12E)で少し遊んでいたのですが今回ESP-WROOM-02(ICのみ)を入手したので今更ですがESP8266の開発ボードを作成してみました。

回路図(pdf) esp8266


USB-TTLシリアル変換にはarduinoのCH340GをRTSを有効にして使用しました。
Auto Programはnodemcuタイプ

ピッチ変換基板は手作業で作成してみます。


GNDピン位置に抵抗などの切った足をはんだ付けします。
モジュールのケースもGNDに落ちているので放熱を兼ねて基板に密着してはんだ付け。


両サイドにはピンソケットを立てています。
リード線をはんだ付け。(リード線は直径1mmを使用)
ピンヘッダを立てて。
リード線は作業しやすい長さで。


3V3とGNDは最短距離ではんだ付けしました。
とぐろを巻いているが気にしない。
ピンヘッダの間隔はスイッチサイエンスの変換基板と同じ。
ピンソケットを利用してブレッドボードシールドなども作成可能と思います。


ベースボードはESP32に対しても流用可能と踏んでいるのですがいろいろ検討しています。


取り敢えずはLEDシールドを載せています。
基板には直接3mmタップを立てています。でも1箇所欠けてしまいました。(・・;)
ベースはポリカプラダンの切れ端を利用。

通電してみる

モジュールをセットする前に3V3ピンで3.3Vを確認してから取り付けます。

raspberry pi3にesptoolを導入します。
esptool – ESP8266およびESP32シリアルブートローダユーティリティ

$ pip install esptool

インストールしたesptoolは~/.local/bin/に保存されます。
パスが通ってないので設定ファイルを作成
~/.bash_profile(無ければ新規作成)ホームディレクトリは適当に

export PATH=${PATH}:/home/pi/.local/bin
$ esptool.py -p /dev/ttyUSB0 -b 115200 chip_id
esptool.py v2.3.1
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Uploading stub...
Running stub...
Stub running...
Chip ID: 0x0091e666
Hard resetting via RTS pin...
$ esptool.py -p /dev/ttyUSB0 -b 115200 flash_id
esptool.py v2.3.1
Connecting......
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Uploading stub...
Running stub...
Stub running...
Manufacturer: a1
Device: 4015
Detected flash size: 2MB
Hard resetting via RTS pin...

ファームウェアの書き換えもesptool.pyから可能です。(コマンドラインからなので少しわかりにくいですが)
あとはArduinoIDEにESP8266ボードをインストールして確認OKですね。

現状の問題点


ArduinoIDEからの読み書きもOKなのですがUpload Speedを921600で長いUSBケーブルを使用すると書き込みに失敗してしまいます。(短いケーブル20cmはOK)
長いUSBケーブルで460800はOK


前回作成したcp2102 usb-シリアル変換モジュールで試してみます。
RTS信号が無いのでスイッチ操作でプログラム書き込みモードにします。
こちらはOKですね。どうもCH340Gモジュールの作り方が下手糞のようです。
また新たに適当なモジュールを探してみます。


次回は当サイトにとって使いやすいと思うWiFiWebServerスケッチの雛形について考察してみたいと思います。

cp2102 usb-シリアル変換モジュール (micro usb 4.3V版)

AliExpressを覗いていたところmicro usb仕様のcp2102 usb-シリアル変換モジュールが目について小型のサイズ、値段も送料込み100均並みの価格とあって購入してしまいました。

cp2102ということで安心していたのですがネットを見ると落とし穴がありますね。
USB-シリアル変換モジュールの色々
USB-シリアル変換器「CP2102モジュール」に要注意

 

届いたcp2102モジュールもやはり4.3V版でした。地雷を踏んでしまいました。

Silicon Labsのデータシートから
9(RST)はOptionで外部から抵抗でプルアップしています。


届いたモジュールは生の5Vがかかっていますね。
で、この9番ピンのパターンを切り離してやればいいことになります。

# 抵抗 R1(0)の位置誤りのため修正しました。


ICの型番も消されています。
画像でははっきり見えますが肉眼ではほとんど見えません。
老眼では全く見えません。
老眼では9番ピンのパターンだけを切ることは至難の業になります。


で、この接続しているチップコンデンサを外してやります。
あとははんだ跡のパターン部分を縦でも横でも切り離します。
なんとか手探りで切り離すことができました。
外したコンデンサはピンヘッダ取付部の+5V-GND間に取り付けます。(外側のほうが良かったです)
確認は通電して3.3Vが出ていればOK
目が達者で多少手先が器用な人であれば可能と思います。(保証はしませんが)


CH340Gの代わりに取り付けてみます。


無事認識しました。Piからは
% lsusb
Bus 001 Device 055: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light

残念ながらRST信号は取り出せそうもありません。


どうしてもmicro usb仕様の小型のモジュールがほしい、しかも低価格でという場合はこんな方法もありかな?(保証はしませんが)

Kyutech Arduino Scope 着せ替え仕様

前回制作したArduino 簡易オシロスコープの着せ替え仕様がやっと判明しました。

オリジナルのソフトな仕様もすごくいいのですが当サイトの様に画面に収まらない、dc/acの表示が気に入らないなど絵心のある人ならば自分仕様のオシロスコープが作成可能です。

行方不明のボタンはキャプチャーボタンと思っていたのですが大きな間違いでそのとおりスコープ部のバックグランドカラーを変更をするボタンでした。

kit_scope.pdeの変更

起動 30行目 int board = 0;
画面サイズ 74行目 size(1200, 640);
設定データ表示 3343 〜 3399行目
scopeカラーボタン 3578行目

参考 当サイトの設定例 edit2-kit_scope.pde
起動時のboard指定以外各設定値は共通です。
board = 3の着せ替えにboard = 0またはboard = 2で起動してもdc/ac関連の設定は空欄になるだけです。
scopeアイコンはスコープバックグランドカラー変更です。

board = 0 or board = 2

board = 3

スクリーンキャプチャ


スクリーンキャプチャはスコープのrunningをstoppedにすると右上のcupture(go)ボタンが有効になります。
win,macではsketch folderが有効になるような記載がありますがPiでは指定不可のようです。
実行したディレクトリ~/sketchbook/kit_scope/以下に連番で作成されます。
filenameの指定は可能です。

これでオリジナルの基本仕様は画面内に収まったと思うのでスコープ本来の操作に専念できそうです。

Kyutech Arduino Scope シールドを作成する

前回のArduino簡易オシロスコープですがなかなか使い心地がいいのでシールドにしてみました。

使いやすくするためベース基板の上に配置してピンソケットを設けて実験用AVRデバイスはこの上に載るようになります。

回路図(pdf) kit-scope.pdf


Arduino簡易オシロスコープは前回作成したシールド上に載ることになりますがこちらは完全に独立した回路です。
USBからの5Vを使って動作します。したがって延長するピンヘッダなどに誤ってハンダ付けをしてしまうとPiを壊すことになってしまいます。


シリアル変換のCH340Gはもう1枚作り直しました。
ショートのピンヘッダを用いています。


メインのシリアル変換のICはこの上に載ります。
ピンヘッダ、ソケットは延長するため付いているのでシールドから外してこのシールド単体でも簡易オシロスコープとして動作します。


シリアル変換も延長しているため配線ミスを犯しやすくなります。
手持ちのユニバーサル基板をベース基板に使用したためスペースが足りずこんな構成になっていますがベース基板に独立した回路として一緒に組むのがいいと思います。
Piと同サイズならば充分可能と思います。いろいろ試してみて最良の構成で作り直してみようと思っています。

ac/dc coupling ui

さて前回Ki Cad versionで疑問だった項目ですが再度Arduino 簡易オシロスコープのページを見直して見ました。
Release Notesの欄にありますね。
v0.70 Oct 07, 2015 new features: ac/dc coupling ui, screen capture

という訳でkit_scope.pdeも見直して見ました。
ありますねそれも冒頭附近に。起動時ここで選択するんですね。
知っている人には当たり前かもしれませんが気が付きませんでした。読んでいないのがバレバレですね(^▽^;)


でましたね。
少々無理矢理感が無くもないUIですが使用できるだけでもありがたいと思います。


Ki Cad versionは最初から適当UIなので枠だけを増やしておきました。
今回はboard = 2: selectable dc/ac coupling だけにしておきます。(文字はアプリケーションから出力されます)
board = 3 は大分入れ替えないといけないので少し使ってからにしたいと思います。

変更箇所 edit-kit_scope
captureについては画面の枠外にactionがあるはずです。5分位探してみましたが見つけることができませんでした。


board = 0 :default


board = 2 :selectable dc/ac coupling
coupling ac にすると2.5Vシフトします。(calib=5V)
CH2のposition設定が違っています。
測定対象によって使いやすいboard選択で起動します。
ディレクトリ名を変更または退避することでそれぞれexportできます。


processingからは/dev/ttyUSB0,/dev/ttyUSB1どちらでも見つけ出してくれます。
arudinoボードを/dev/ttyUSB0に固定したい場合は一旦SWをOFF arudinoボードからONにすれば順に/dev/ttyUSB0から割り当てられます。


スペック上過度な期待はできませんが一般工作や学習には充分実用に耐える仕様だと思います。

いつでも使いたい時に即使える、電子工作にとっては非常に有効なツールですね。

Top