JJ1WKN Log

自作や移動運用関連のログです。

WiFi対応CWメモリーキーヤーElekinoWiFiの製作

2016-02-22 | Tanukino
ケースに入れました。
スピーカーは1石アンプと小型スピーカーにしました。





中身です。
電源は9Vの006Pでもいいのですが100mA弱も電流が流れるので、単3電池4本にしました。
充電池を使用することを想定して、外部電源端子兼充電端子を付けました。
ESP-WROOM-02は一つしかないので、開発用に基板を使用しました。

ESP-WROOM-02でElekinoWiFiの検討 その6

2016-02-17 | Tanukino
その6です。

基本機能は大体できたので、ネットワーク回りに手を入れました。

ESP-WROOM-02にはWiFiの親機になるアクセスポイント機能と子機になるステーション機能があります。

家庭内無線LANが無い環境では、アクセスポイントに接続するしかありませんが、家庭内無線LANがある環境では、普通WiFiの接続先は家庭内無線LANなので、ElekinoWiFiを使用するために切り替えるは面倒です。
そこで、アクセスポイントと共に家庭内無線LANにも接続する機能を追加しましたが、家庭内無線LANに接続するためのSSIDとパスワードは使用する環境によって異なりますので、Webサーバーの画面から設定できるようにしました。

改良したWebサーバーの画面です。
SSIDとパスワードの入力欄を追加しました。
また、コールサインの入力欄に入力したコールサインがタイトルに表示されるようにしました。


使い方です。

家庭内無線LANに接続するためには、SSIDとパスワードを入力する必要がありますが、家庭内無線LANに接続しないとSSIDとパスワードを入力することができません。
タマゴが先かひよこが先かの所謂「たまひよ問題」が発生します。

そこで、ElekinoWiFiのアクセスポイントに接続します。
ElekinoWiFiのアクセスポイントはSSID=tanukino、パスワード=xxx(マニュアル記載)なので、iPadやスマートフォンなどWiFi接続できる機器で接続します。
なお、暗号はWEPを指定します。
iPadなどのWebブラウザで192.168.4.1にアクセスすると、ElekinoWiFi上のWebサーバーの画面が表示されますので、家庭内無線LANのSSIDとパスワードを入力して、[SetMemory]を押して記憶させます。

ElekinoWiFiを再起動すると、家庭内無線LANに接続し、IPアドレスが表示されますので、以降はそのネットワークに接続されている機器から使用することができます。
この例では、192.168.0.4がElekinoWiFiのIPアドレスなので、Webブラウザで192.168.0.4にアクセスすればOKです。
192.168.0.4はルーター上のDHCPサーバが割当ますので変更されることがあります。
ElekinoWiFiのアクセスポイントからIPアドレスは確認できますが、接続先を変更するのは面倒なのでelekino.localでもアクセスできます。

この状態でもElekinoWiFiのアクセスポイントは動作していますので、移動運用など家庭内無線LANが届かない場所ではElekinoWiFiのアクセスポイントに接続すれば使用することができます。

少しややこしいので、ネットワーク関連を整理しておきます。


ESP-WROOM-02でElekinoWiFiの検討 その5

2016-02-14 | Tanukino
その5です。

試作機はとりあえず完成です。
メモリSW基板と、スピード調整用のVRを付けました。


回路図です。

スピード調整用のVRですが、一つしかないAD変換ポートはメモリSWに使用したので、通常のI/Oポート(io14)を使用して、VRの値を読み取ります。
出力ポートに設定してHIGHを出力すると102のCが充電されます。
ここで入力ポートに切り替えると、100kΩのVRを経由して放電されます。
VRの設定により放電時間が変化するので、放電時間を測定することにより、VRの変化を読み取ることができます。

メモリSWの抵抗は前エントリーの通りで、最大1023のAD変換値ベースで、007,184,361,540,718,891とほぼ等間隔になりましたので、初期値を95、ステップを178としてループしながら押されたSWを判定しています。


Webサーバーの画面はM6までサポートしました。

ESP-WROOM-02でElekinoWiFiの検討 その4

2016-02-12 | Tanukino
その4です。

ソケットからの配線ではテストがしにくいので、ElekinoWiFiの回路をESP-WROOM-02基板に追加しました。


Webサーバーの画面も少し変更して、スピードの設定とメッセージ表示エリアを追加しました。


さて、AD変換でのSWの判定回路ですが、ESP-WROOM-02場合AD変換の最大値は1.0Vです。
設定電圧が可変できるレギュレータか、シャントレギュレータで1.0Vを作るのが本筋ですが、電源の3.3Vから抵抗分圧で1.0Vを作ることにしました。
回路図です。23k(22k+1k)と10kで1.0Vを作り、SWがどれも押されていない状態では1.0Vとなります。
この1.0Vを元にSWを押すと1/6V間隔で電圧が上がっていく想定です。
安定化電源から1.0Vを加えてテストした時は、前エントリーで書いたように誤差1%程度でいい感じでした。
AD変換処理を追加して実際に測定した結果を示してありますが、想定よりかなり低い値で、等間隔にもなっていません。
SWを押すと、SW側の抵抗が10kと並列に接続され、基準の1.0Vの電圧が低下するのが原因でした。


実測値を元にプログラム側で対応することもできますし、対応工数としてはシャントレギュレータを追加するのが簡単ですが、今後のことも考慮して、並列に接続されるSW側の抵抗も考慮して計算し直すことにしました。


前エントリーと同様にR1~R5を求めてから実際の回路に使用するRa~Reを求め、手持ちの抵抗で近い値になるように合成します。






ESP-WROOM-02でElekinoWiFiの検討 その3

2016-02-08 | Tanukino
その3です。

メモリSWはAD変換でどのSWが押されたかを電圧で判定していますが、メモリー数が多くなると、電圧の差が小さくなるので、誤動作の原因となります。
そこで、等間隔の電圧になるような分圧抵抗値を計算してみました。

基準電圧をVとして、分割数をnとすると、1つめのSWを押した時の電圧をV/nとし、この時の抵抗をR1とします。
2つめのSWを押した時は2V/n、R2となります。
R1~Rnの計算は簡単でi番目の抵抗Riは、Ri=iR/(n-1)です。
実際の回路では、R2はR1に抵抗を直列に接続しますのでR2=Ra+Rb=R1+RbからRbを求めます。
図にはn=6の時の計算式を示してあります。



Rは任意の値で構いませんが、小さくし過ぎると電流が多く流れてエコではありませんし、大きくし過ぎるとノイズなどで誤動作しやすくなります。
n=6,R=5kΩで試算してみました。
n=6だとキリのいい数値となりますが、手持ちの抵抗で実装できるようにRを加減するといいでしょう。


SW基板に抵抗を実装してテスターで実測してみました。
基板レイアウトです。2.5kと5.0kは直列で合成しました。


測定結果です。
抵抗値の誤差とテスターの誤差が含まれていますが、最大1%程度でした。
AD変換の誤差の方が大きくなりそうですね。
-----------------------
  計算値 実測値[mV]
----------------------
M1 0000  0000
M2 0167  0169
M3 0333  0336
M4 0500  0504
M5 0666  0668
M6 0833  0833
----------------------

ESP-WROOM-02でElekinoWiFiの検討 その2

2016-02-05 | Tanukino
その2です。

ElekinoSdからエレキー部とメモリ送信部をパクって合体させました。
パドルによるエレキー動作と、Webサーバーからのメモリ内容の送信ができるようになりました。


ポートの割当は、io04とio05にパドル、io12にサイドトーンを割り当てました。
送信機はio13で(とりあえずLedを接続)、メモリSWはtoutでAD変換。
AD変換ポートは1つしか無いので、スピードはio14でCRの時定数でVRの抵抗値を測定することにします。
AD変換周りは実験が必要です。

AVRからの移植でハマったポイントです。

・tone()が実装されていないので、pwmで代用します。
ONは
 analogWrite(dPortTone, 500);
 analogWriteFreq(FREQ);
OFFは
 analogWrite(dPortTone, 0);

・ウイークプルアップができないようで、ハードでプルアップします。

・Stringクラスの配列を1文字単位でアクセスしたら、例外が発生してリセットされました。
高速でアクセスするとNGなようで、ループ中にSerial.println()を入れて対策しました。

ESP-WROOM-02でElekinoWiFiの検討

2016-02-03 | その他
ESP-WROOM-02を使用すれば、無線LAN接続のElekinoができそうです。名前はElekinoWiFiですね。
タブレットやスマートフォンからESP-WROOM-02に接続してメモリ内容を設定できればSDカードよりも便利です。

早速ユーザーインタフェース部分を試作してみました。
ESP-WROOM-02はアクセスポイントモードで動作し、ESP-WROOM-02上で動作しているWebサーバーからメモリ内容を設定します。
送信ボタンを押せば、送信できますし、メモリ内容は内蔵メモリに書き込むことで、Elekino側のボタンを押せば、単体でもメモリ内容を送信できます。

アクセスポイントはTanukinoに変更しました。
ルーターとしては動作していませんが、192.168.4.1がWebサーバーのIPアドレスなので、Webブラウザで192.168.4.1に接続します。


ホームページです。
上段でメモリ内容をセットします。
中段はボタンを押せばメモリ内容を送信します。
下段はおまけでLedをOnOffするボタンで、遠隔操作のデモ用です。


メモリ内容を設定した画面です。
ESP-WROOM-02にはEEPROMはありませんが、プログラムが格納されるFlushMemoryにファイルとして書き込み、必要に応じて読み出さいて使用します。


中段のM1ボタンを押したが格納です。
ここでは、確認用にM1の内容を表示していますが、実際にはCWが送信されます。


下段のLed On/Offです。





あとはElekinoSdから、必要な部分をパクって合体すれば良さそうです。

ESP-WROOM-02をArduino化してLチカ、Webサーバーのテスト

2016-02-02 | その他
ESP-WROOM-02をArduino化してLチカしてみました。

ArduinoのD13ポートはESP-WROOM-02ではIO13ポートに相当するようです。
WriteSW(IO00)を押しながらリセットして書き込みモードにしてからいつもとおりにArduinoIDEから書き込みます。
ArduinoIDEの設定はdevice plusの記事を参考にしました。

大量のフラッシュを搭載していますが、ライブラリで45%も消費していますが、まだ2MBほど空きがあるようで、プログラムサイズを気にすることなくプログラムできそうです。
--
最大434,160バイトのフラッシュメモリのうち、スケッチが198,860バイト(45%)を使っています。
最大81,920バイトのRAMのうち、グローバル変数が33,046バイト(40%)を使っていて、ローカル変数で48,874バイト使うことができます。
--




左下のLEDがLチカ用にソケットに接続してあるだけなので、IO13からワイヤーで結線します。




Lチカができたので、次はWiFi接続のテストです。

サンプルプログラムのWiFiWebServerを動かしてみました。
起動すると、家庭内の無線LANに接続して、IPアドレスを表示し、Webサーバーを起動します。


PCから192.168.0.5/gpio/1にアクセスしてみました。
io13の状態が表示され、LEDが点灯します。



次に192.168.0.5/gpio/0にアクセスしてみました。
io13の状態が表示され、LEDが消灯します。


このようにPCから無線LAN経由でESP-WROOM-02上のポートを制御できます。
中身は受け付けたリクエストのアドレスに応じてポートの制御と、レスポンス用のHTMLを生成しているだけです。


次は少し複雑なAdvancedWebServerを動かしてみました。
やってることは、経過時間とダミーデータによるグラフを表示しているだけです。
ダミーデータの代わりに各種センサーからのデータを表示すると実用的です。
PC側のネットワーク上の192.168.0.5にアクセスしてみました。


ESP-WROOM-02自体がアクセスポイントになっているハズですからタブレット端末の無線LAN接続をESP-WROOM-02に変更して192.168.4.1にアクセスしてみました。


スケッチを見るとmdnsにも登録しているようです。
--
MDNS.begin ( "esp8266" )
--
esp8266.local/でも同じようにアクセスできました。
DHCPサーバから割り当てられたIPアドレスをシリアル経由で確認する必要がないので便利です。
192.168.4.xのAP側では動作しませんでした。端末の環境によるのでしょうか?
無線LAN設定でESP-WROOM-02のIPアドレスが分かるので支障はありませんが。

192.168.0.x側の無線LANからはesp8266.local/でアクセスできたので、端末の環境ではないようです。

ESP-WROOM-02 テストボードの製作

2016-02-01 | その他
433MHzでのデータ通信ができたので、次は2.4GHzに挑戦です。

2.4GHzといってもWiFiです。

ESP8266EXというMCUを搭載したWiFiモジュールのESP-WROOM-02が秋月で550円と格安で販売されているので、早速テスト用の基板を作りました。

ESP-WROOM-02は技適を取得したWiFiモジュールで、シリアル接続するとATコマンドで設定や通信ができます。
また、各種I/Oが使用でき、MCU上ではArduinoが動作します。

先ずはシリアル接続してATコマンドで遊んでみます。

製作した基板です。
ESP-WROOM-02モジュールは1.5mmピッチなので、裏返して銅線で接続しました。
ESP-WROOM-02の全ピンをソケットに出して、3.3V1Aのレギュレータ、USBシリアル変換モジュールへの接続端子を設けました。
ネット上の情報では大食いのようで1Aのレギュレータを搭載しましたが、とりあえずUSBシリアル変換モジュールからの5Vを電源にしました。


基板の裏です。


回路図はまだ書いていませんが、部品レイアウトです。
リセットSWと書き込みモードにするためのSWを追加しました。


USBシリアル変換モジュールを接続してテスト中です。


ArduinoIDEのシリアルモニタからESP-WROOM-02に接続します。
readyが表示されれば、接続成功です。
atと打つとOKが返ります。

AT+CIFSRはIPアドレスなどを表示するコマンドですが、大文字でないとエラーになります。
デフォルトはLANの子機+APのモードですが、LANに接続していないので、AP側のIPアドレスのみ表示されます。

AT+GMRはバージョンなどの情報が表示されます。


AT+CWLAPコマンドで周辺のアクセスポイントが表示されるハズですが、エラーとなります。
そこで、AT+CWMODE=3で再度「子機+AP」にモードを設定してAT+RSTで再起動したら表示されるようになりました。
周辺のAPですが、SSIDなどはマスクしてあります。


AT+CWJAP="ssid","password"で家庭内の無線LANに接続します。
無線LANのDHCPからIPアドレスをもらって192.168.0.5になりました。
AT+CWSAP?でAPの設定を確認します。
デフォルトでは、SSIDはESP_08AF0D、パスワードナシの設定でした。
タブレット端末からESP_08AF0Dに接続してみました。
AT+CWLIFで接続中の端末を調べられます。


タブレット端末側の設定です。


とりあえず、無線LANの子機として家庭内の無線LANに接続して、自分がアクセスポイントとして動作していることが確認できました。
192.168.4.xから192.168.0.xへのルーティングは流石にしていないようです。


次はArduino化してLチカです。