10/30/2018

Arduino と RCWL-0516 を使って、動きを捉えた際に音を出す

Dscf0246 動物などの動きを捉えた時に、MicroSDカードに保存してある「sound.wav」の音を発する装置をブレッドボード上で組んでみた。

回路とsketchは出来上がっていて、SDカードも認識されている筈なのに、暫く音が上手く出なかった。音が出ない原因は、PCからプログラムを書き込む際に使っていたUSBケーブルからの供給電力不足。Arduino NANO にプログラムを書き込み後、AC電源から2.1Aの電力を供給できるUSB電源供給変換器を通して接続すると、上手く音を出すことが出来た。ただし、音量をかなり増幅しているので、信号の無いはずの際も大きな雑音が出てしまう。

Dscf0247 Arduinoarduino の出力ではスピーカを鳴らすのに少し弱弱しいので、LM386を使ってもう少し大きな音量で鳴らせるようにした。
左がブレッドボードに組んだもので、右側はFritzingを使って回路を記載したものである。
回路を組むうえで、RCWL-0516というマイクロ波レーダーセンサーを使ってみた。ドップラーレーダー技術を使って移動動体や人体等を検知するマイクロ波センサーモジュールというものだそうだ。技適に適合しているのだろうか?という疑問はある。

Fritzingを使って回路を分かりやすく纏めるうえで、Fritzingパーツが不可欠だが、探してみると、RCWL-0516のパーツを作られフリーで提供されているものを見つけたので、それを使わせて戴いた。場所は下記《参考情報》に記載したので、使われる際には参考にしてください。

作成時の課題、ここで使う「wavファイル」の作り方など・・・ 後ほど記載します。


《Sketch》

#include <SD.h>
#include <SPI.h>
#include <TMRpcm.h>
#define SD_ChipSelectPin 4

int rcwlPin   =  6;  // RCWL-0516 or PIR sensor out
int ledPin    =  8;  // LED for RCWL or PIR
int rcwlState =  LOW;   // states of RCWL or PIR at the initial

TMRpcm audio;
 
void setup(){
  Serial.begin(115200);
  pinMode( rcwlPin,  INPUT);   // RCWL or PIR
  pinMode(  ledPin, OUTPUT);
  audio.speakerPin = 9;
  digitalWrite( ledPin, LOW);  // LED:OFF
  
  // see if the card is present and can be initialized
  if (!SD.begin(SD_ChipSelectPin)) { 
  Serial.println("SD fail");
  return;                   // don't do anything more if not
  Serial.println("SD successful");
  }
  audio.setVolume(6);      //  Set volume level(0 to 7)
}
 
void loop(){
  // read the state of RCWL or PIR sensor
  rcwlState = digitalRead(rcwlPin);
  if (rcwlState == HIGH) {   // detected => "HIGH", if not-detected => "LOW"
                             // Detected!              
   digitalWrite( ledPin, HIGH);  // LED :ON
   audio.play("sound.wav");
   digitalWrite( ledPin,  LOW);  // LED: OFF
  }
}


《参考情報》
・fritzing parts RCWL-0516   「OMNIGATHERUM」 ここから入手
 このブログの中ほどに記載のされている「The parts are follows:」の下にあるNo.4のリストをクリックすると、fritzingのパーツがdownload出来る。

10/22/2018

LEFTEK PTZ Camera の IP address 設定

LEFTEKのPTZ camera Model [CA11-SC-I-POE-223] を購入した。デフォルトのIPアドレスは、192.168.0.200で設定されている。しかし、私のネットワークとは違っているので、PC側にある画像表示ソフトから、そのカメラを見つけることが出来ない。

IPアドレスを自分のホームアドレスに合わせられれば、良いのだが、その方法が探しても見つからない・・・。

以前購入したIP camera には、IPアドレス変更用のソフトが、ミニCDで添付されていたが、先日ゴミとして捨ててしまった・・・。

Googleの検索機能を使ってIPアドレスを変更する方法を探し、幾つかのIP関係ソフトをdownloadしてみたが、僕には、どのソフトも使い方が良く分からない。

半ば諦めかけたが、もしかして、IPカメラメーカーのdownload に、IP設定用のソフトがあるのではないか・・・と思って、GoogleでカメラメーカーLEFTEKのサイトが無いかと調べてみた。

YoutubeにLEFTEK Dome Camera 2.5" Mini の設定映像があり、その中にCamera の「Client Setup」のURLに繋がるQRコードが表示されていた。

動画でQRコードが表示された場所で、
その画面を一時停止させて、スマートフォンを使ってQRコードを読み取り、Client SetupのURLに行き着くことができた。

スマートフォンで読み取れた
Client Setup の圧縮ファイルがあるURL ⇒
 http://121.42.188.188:83/HS-C.zip

Hsc これ「HS-C.zip」をdownload して、解凍すると、左図の中にあるように、HS-Cフォルダの中に、1つのフォルダと1個のファイルが得られる。



IPアドレスを変更するには、「
IPWizardIII_2.1.1(中文)」を使えば良い。そのフォルダを開き、「IPWizardIII_2.1.1.exe」をダブルクリックしてアプリを起動させる。

Ipwizard左図は
IPWizardIII_2.1.1.exe」を起動させたもの。
起動したアプリ(左図)の中の文字は、中文が文字化けした表記になっていて、何が書かれているが全く解らない。

エンジニアの感を使って、右下の[ヒムヒ・]と書かれているボタンらしきものをクリックする。

表形式の左から3列目[IPオリヨキ]と書かれた場所に、私のネットワークに接続されている IP camera のアドレスが表示された。

この表の中にある「変更したいIPアドレス」の行をクリックすると、表の下側の中央部にIPアドレス、ゲートウェイアドレス、サブネットマスクが表示された。

私は、ここに表示されたアドレスを修正して、その下側にあるボタンらしきところをクリックし、IPアドレスの変更を行うことが出来た。

09/30/2018

通線ワイヤーの先端に灯りを点けるには・・・

通線ワイヤーを使って電線を通す作業をする際に、作業場所が暗くて、通線ワイヤーの先端が何処にあるか見えず、作業しにくい場合がある。

Dscf99721 Dscf99601 そんな時に、通線ワイヤーの先端に灯りを点けられれば、ワイヤーが何処まで来ているか分かりやすく、作業もしやすくなる場合がある。
しかし単に明るいだけでは、外から差し込む光とワイヤーの先端とを見分ける事が出来ないかもしれない。
そこで、Arduinoを使ってLEDを点滅させればワイヤーの先端を見つけやすくなるだろうと考え、インターフォン回線用のコードの先端にLEDを付け、Arduinoで点滅させる装置を作ってみた。
このコードを通線ワイヤーにテープで巻き付ければ、目的達成だ!

僕は、なるべく小さく纏めたかったので、手持ちの55x35x15mm(Amazonで購入した5個242円のケース SODIAL製)サイズに入る様に、部品を選定した。


LEDの色は、ここでは白色を使った。赤色でも良かったかもしれない。

使用部品など
Arduino Pro Mini モジュール Atmega328  3.3V 8M (DC入力:3.3V~12V)
    Amazonで購入  @333円
②LED 白色
③インターフォンコード
   IEM 0.65x2C   2m  @51円/m セキチュウで購入 
スライドスイッチ(型番:SS12D01
 
   ミニチュア 垂直 オン/オン 3端子 2接点
   
全体サイズ: 8.6 x 4.4 x 12.2mm(L * W* H)  
   スイッチは無くても、電源コードの抜き差しでON/OFFは出来るので必須ではない。
DC電源ジャック(メス) 3ピン 3.5mmX 1.3mm

   uxcell製 418円/30個  まとめ買いしていたのが有った!
⑥内部結線用電線  結線作業が出来ればいい。

⑦USB TTL変換アダプタ
  SODIAL(R)FT232RLモジュール5V 3.3V FTDI USB TTL変換アダプタ @326円
⑧熱収縮チューブ
  DANIU 127pcs 7Sizesポリオレフィンハロゲンフリー熱収縮チューブ  @575円
⑨ボンドガン
  私が使っているのは SK11 ボンドガン 40W GM-150 ちょっと大きいかな・・・
  百均ショップで、もっと手軽なのが入手できる。


写真は、左から 

結線確認・書込み作業   ケース収納     コードの端にLED
Dscf99701 Dscf99661 Dscf99671








注記)Arduino Pro Mini は、基板にUSB差込み口が無いため、USBシリアル変換器(写真の赤い基板)を使って、左上にある図のように結線して、プログラムを書き込まなければならない。

この時の注意点
Arduino側ボードの選択
Arduino_pro_or_pro_mini
①ツール⇒ボードの選択で、左図のように
  Arduino Pro or Pro Mini  を選択する事

②プロセッサは、購入したボードに合わせ選択すること
  僕の場合は、ATmega328P(5V,16MHz)を選んだが・・・


USBシリアル変換器
私の購入したシリアル変換器は、USB差込口を上に置いて、左下から右方向のピン配列は、ボード上に以下のように印刷されているので、Arduinoとの接続は、「⇒」の右側に書かれた場所に接続すること。

①DTR  ⇒ DTRへ接続
②RX  ⇒ TXへ接続
③TX  ⇒ RXへ接続
④VCC  ⇒ VCCへ接続
⑤CTS  ⇒ 結線しない 
⑥GND  ⇒ GNDへ接続
 私は最初、DTR接続を忘れて接続したので、初回は書き込みが出来たが、2回目以降書き込みが出来なくなった。何故だろうと調べて・・・DTR接続していないと2回目以降も書き込みができない事が分かった。DTRの接続は、忘れないように!

LEDライトは、
IEM 0.65x2C のコードに半田付けした後、むき出しの結線の上からボンドガンでコーティングし、その上から熱収縮チューブを被せてライターの炎で軽く炙り密着させた。(上図参考の事)

もし、LEDライトの色を変更したければ、Arduinoを入れたケースの近くで、コードを接続プラグで繋ぐよう改造してやれば良いだろう。そうすれば、白色と赤色のランプを選択して使う事ができる。


参考情報
Arduino Pro Mini 、Pro Microに関連する情報
 https://ht-deko.com/arduino/promicro.html


Sketch

const int LED_PIN = 8;

void setup()
{
  pinMode(LED_PIN, OUTPUT);
}

void loop()
{
  digitalWrite(LED_PIN, HIGH);
  delay(100);
  digitalWrite(LED_PIN, LOW);
  delay(100);
}

09/08/2018

僕が使った第二種電気工事士受験の参考図書など

第二種電気工事士受験の為に、僕が購入した参考図書についてメモしておきます。僕は、ここに書いた図書とyoutubeを見て、筆記試験・技能試験に1回で合格することが出来た。

1) 最初に購入した図書「第2種電気工事士 筆記 過去問 2017」

40411068_1873009822781524_854415292 『電気工事士の試験問題とはどんなものだろうか?』 と興味を持ち、2017年末、家の近くの書店で最初に購入した本。
この時は、未だ受験しようとは思って居なかった。

過去の問題が数多く掲載されているので、ここにある問題を解いて間違えば、自分の記憶の弱点や曖昧なところが明確になる。自信が無かった問題にはマーキングを付けて、何度も確認するのが良い。

それで、今年(2018年上期)筆記試験直前には、この本の中の542問題全てを、自信を持つまで繰り返し解いて確認した。(価格は980円+税)
試験を受けようとする人は、過去問題を沢山掲載しているこのような本を一冊持っていても良いと思う。


2) 2018年上期にある『第2種電気工事士試験を受けよう!』と決めてから、購入した参考図書。

40397908_1873009732781533_593255638 この本は、筆記だけでなく、技能についても書かれている。

筆記と技能に関するポイントが、コンパクトに一冊に纏まっていると思って、これも家の近くの同じ書店で購入した。 

ただ、自分の曖昧な記憶を確認するために調べようと、この本を見る際には、その表現の方法について、少し不満があった。(価格は2100円+税)

もし最初から『電気工事士2010年版 筆記試験すぃ~っと合格』を買っていれば、この本は不要だったのではないかと思う。




3) 第二種電気工事士の受験申請をして後、この書籍の評判を何処かで見て、Amazonから購入した。(価格は1900円+税)
40534873_1873009746114865_487235985
重要なポイントに関して理解を助ける挿絵と、説明コメント、表などに纏められたもの等が数多く書かれており、体系的に理解しやすく、とても参考になった。

筆記試験の会場でも、この本を持参してきていて、最後の確認をしている人が多くいた。








4) 3)の書籍「すぃ~と合格」シリーズの筆記試験用の参考図書は、自分が勉強する際にとても役立ち良かったので、技能試験対策のために筆記試験を受ける2週間ほど前に購入した。

40520208_1873009786114861_371119173 今年(平成30年度)試験に出ると公表されている候補問題全てについて、注意すべきポイントが丁寧に書かれており、大変参考になった。

試験候補問題の複線図は、2~3分で描けるようになるまで何度も繰り返し練習した。 (価格は1900円+税)










参考:

筆記試験と実技を評価する技能試験がある。技能試験練習の為に、その中で使う部品キットというものも売られている。僕は部品キットは買わず、近くのホームセンターで次のような最小限の部品類を購入し、技能試験の作業に慣れるように練習した。


《僕がホームセンターで購入した練習用部品》
・ランプレセプタクル ・・・ 1個
・露出型コンセント ・・・ 1個
・埋込連用コンセント ・・・ 数種類 各1~2個
・引掛シーリング ・・・ 1個
・埋込連用タンブスイッチ ・・・ 1個
・埋込連用パイロットランプ ・・・ 1個
・埋込連用取付枠 ・・・ 2~3個
・端子台 ・・・ 2個(端子数違い各1個)
・アウトレットボックス ・・・ 1個
・ゴムブッシング ・・・ アウトレットボックスの穴サイズに応じたもの
・ボックスコネクタ ・・・ 1個
・ロックナット ・・・ 1個
・PF管 ・・・ 50cm程度
・リングスリーブ ・・・ 小・中 (小分け袋入りのものを購入)
・差込形コネクタ ・・・ 2,3,4本差込のものを各2~3個
・VVF1.6-2C ・・・ 8mほど (輪づくり練習のため、相当な長さを使った・・・)
・VVF2.0-2C ・・・ 2mほど
・VVF2.0-3C ・・・ 2mほど

注意)上記と同じ部品を同じだけ購入したからといって、試験に合格する訳ではないと思う。部品に対する知識や、取扱いの経験などによって、購入する部品は違うと思うので、個人の技能レベルに合わせて購入などするのが良い。職場などに該当する部品が有れば、個人で買わずに部品に関する知識を得られる場合もあるだろう。

技能試験会場に持ち込んだツール
Img_20180909_082114 画面上部に、物差し と 短いインシュロック数本

画面左から
①プラスドライバ(2番 VESSEL 700)
②マイナスドライバ(刃幅5.5mm)
③電工ナイフ(MARVEL)
④ペンチ(KNIPEX 13 81 200)
⑤電工ペンチ(KLEIN TOOLS D2000-7)
⑥ケーブルストリッパー(ホーザン社 P-958)
⑦小型圧着ペンチ(ホーザン社  P-737)
⑧ニッパ(KEIBA NH-228)
⑨ウォータポンププライヤ(ホーザン社 P-244)

REGZA DBR-M180タイムシフト使えなくなり 3.5"HDD換装

Dscf9868 DBR-M180タイムシフトが、6時間分くらいしか出来なくなった。(調べ直してみると、仕様には、『地上デジタル放送6チャンネル分を最大15日分(M180は8日分)の番組をタイムシフトマシン用ハードディスクにまるごと一時保管できます。』とある) 映像画質のレベルによって、タイムシフト記録できる時間も変わるのだが、そういう問題でも無いようだ。この状態では、不便でしょうがない。そのため、内臓のHDDを交換してみることにした。

DBR-M180のHDD換装に関する一番新しい記事は、2016年にある(
参考としたURLの2、3番目)。換装に関する書き込みを調べてみると、DBR-M180 は、本来1TB仕様であるが、2TBのHDDで交換出来る可能性がある事が分かった。

ところで、自分には、確かサーバーの交換用にと3年ほど前に購入したWD製RED版が有る筈・・・と探してみると、容量1TBのもの(WD10EFRX)が一台有った。

REGZAの交換には2台のHDDが必要なので、2TBのものを2台購入するか、それとも1TBのものを1台追加とするかと考えたが・・・・・、WD10EFRX(1TB, 5400rpm, RED) を1台 Amazonから購入した(@7560、送料込み)。
先程注文したので、2日ほどすれば届くはずだ。


上記コメントを書いてから12時間経過した後、REGZAのタイムシフトを見てみると、既に番組表が表示出来ない状況になっている・・・・・。

HDDは明日届くようだから、届いたら早速換装することにしようと思う。


Dscf9872 Dscf9925 注文したHDDが到着した! 

左側の写真で、青いパッケージのものが、今回購入したもので・・・、右側の赤いパッケージは、以前購入したもの。


既購入品を開封して製造の日付を見ると、2013年12月となっているので、多分2014年初頃購入したものと思われる。(右側の写真は、HDD換装後のもの。)

早速、ラックからDBR-M180を外して、分解作業に取り掛かった。

手順は、下記3)を参考にして、僕は分解作業用の机の脇には、ガムテープの「のり面」を上向けて配置し、そこに外したネジを外した順に、外した位置も分かる様に置き、部品の紛失が無いようにした。
尚、参考としたURLには、ネジの番号と場所が分かる様に表示されているので、URLにあるように、ネジの番号付けをしておくと、組立時に締め付け場所を迷わずに済む。僕はそれをやらなかったので、一部の場所で間違えて締め付けた事が分かって、また分解しなおす事になった。

注意点
・フラットケーブルは、注意深く指で挟み、上方にゆっくりと引っ張れば抜くことが出来る。
・他のケーブル類は、ケーブルの分岐辺りに、先が細く尖ったピンセット等を挿し込みながら抜くと良いと思う。
・分解し、組み立て作業に入るところで、M3プラスチックネジをネジ切ってしまった。幸いにして予備となる部品は、手持ちがあったのでそれを使い止めた。
・分解時、配線を無理に引っ張ったりしないように・・・無理があるとすれば、何かの部品を外し忘れている可能性がある。


作業時の写真とコメント
Dscf9884 上蓋を外したところ。
左中央部にあるのは、録画用2.5インチHDD(500GB)
現時点では、これには問題が無いので換装しない。
タイムシフト用のHDDは、ブルーレイ・ドライブの下、緑の基板の下に配置されている。



Dscf9897 ブルーレイ・ドライブを外したところ
タイムシフト用のHDDが顔を出した!
フラットケーブルなどを慎重に外して・・・緑色の基板を取り出す。





Dscf9909 緑色の基板を外した
しかし、3.5インチHDDは、ファンが付いた金属板を外さないと交換できないので、これを取り外す。





Dscf9912 Dscf9921 ファンが付いた金属板を外すと、チューナーが付いた基板が出てくる。
HDDを装着したケースは、右側の小型ファン取付けネジで共締めされているところがあるので、右側にある小型ファンケースを外さないと3.5インチのHDDケースは取り出せない。

細いケーブルの切断などに注意し、力を入れず慎重に扱う事。
HDDケースを取り出す前には、HDDへ接続されている電源とSATA信号ケーブルを抜き、配線の仮止めから線を外す必要がある。
写真右の様に少しケースを持ち上げた状態にしてから、HDD電源とSATA信号ケーブル線を外す。
Dscf9925_2 Dscf9926 左図は、HDDケースを取り出し、
古いSeagate製HDDをWD製HDDに換装したところ。
右の写真は、本体ケースに組み込み、
ファンの付いた金属板を組込んだところ。


換装完了後
「お買い上げ時の設定に戻すには(設定内容を初期化するには)」の作業へと進めた。

ここでの注意点
①レコーダーの初期化1、②レコーダの初期化2 という2つの初期化方法がある。僕は、タイムシフトマシンの録画設定を行うのだからと、②のレコーダの初期化2を選んで進めたが、これで進めたところ、「チャンネル設定がされていない」と表示されて、タイムシフト設定が出来なかった。そのためやむなく「すべての初期化」を実施することになった。

「すべての初期化」を選べば、内臓HDDに録画されている番組も消えてしまう。HDDを換装したのだからと気持ちを切り替えて、「すべての初期化」を実施したところ、タイムシフトマシンの設定が出来るようになった。

もし内臓HDDに録画した番組を残したければ、USB_HDDを用意して、そこに番組を移してからこの作業をすると良い。僕が再度見たいと思ったものは、USB経由で移して置いたので、大きな問題は無かった。


参考としたURL

1)HDD換装 2)を引用している
http://rdwiki.rd-style.info/wiki.php?HDD%B4%B9%C1%F5#e72065b7

2)2016年9月24日
http://review.kakaku.com/review/K0000293977/ReviewCD=963076/

3)TOSHIBA REGZA DBR-M180のHDD交換  2016年3月 6日
http://kinta1gen.cocolog-nifty.com/blog/2016/03/toshiba-regza-d.html
機器の分解作業方法も丁寧に書かれている。
・タイムシフト用HDD(1TBの
WD10EZRZ )x2本を用意

08/16/2018

ESP32 DEVKIT V1 とAE-GYSFDMAXB で$GPGSVを捕捉してみる

今度は、ハードウェアを、DOITの ESP32 DEVKIT V1 とし、前回までと同じように、$GPGSVのデータのみを表示するSketchを載せておく

Img_20180816_183457 使用した部品は、
DOIT ESP32 DEVKIT V1
②GPS module  AE-GYSFDMAXB
  「日本の準天頂衛星システム(QZSS)『みちびき』3機受信(193,194,195)に対応とある」
③ブレッドボード  サンハヤト SAD-101 ニューブレッドボード
その他、ジャンパーケーブル


Sketchで注意することは
1)GPSモジュールのTXD端子は、ESP32ボード側のRX2ピン(GPIO16)へ接続する。

2)Wemos Lolin32に対して、Sketchでの見かけ上での変更点は何もない。

3)ESP32 Dev Module を選べば動くようだが、出来れば、
ファイル⇒環境設定で 「追加のボードマネージャのURL」の入力枠に下記のように2つのURLをコンマで区切ったものを書き込めば、
https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json


 ボードには「DOIT ESP32 DEVKIT V1」が表示されるので、これを選択するのが良い。


《参考としたURL》
Maker Advisor   ESP32 vs ESP8266 - Pros and Cons
  https://makeradvisor.com/esp32-vs-esp8266/
Installing the ESP32 Board in Arduino IDE (Windows instructions)

    https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/


《Sketch》

// Search $GPGSV   for ESP32 DEVKIT V1-DOIT
// https://makeradvisor.com/esp32-vs-esp8266/ 
// https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/
  HardwareSerial GPSRaw(2);  // ESP32 UART2 GPIO-16 ( RXD2 ) --- GPS TXD
  static const uint32_t GPSBaud = 9600;
  char GPSRc;
  int  GPSRi;
  String Buffer;
  
void setup() {
  Serial.begin(115200);
// GPS TXD-pin should be connected to Lolin32 Pin-16
   GPSRaw.begin(GPSBaud, SERIAL_8N1, 16, 17);
}

void loop() {
  if (GPSRaw.available())  searchGSV();
}

void searchGSV(){
  GPSRc = GPSRaw.read(); // read 1 character
  GPSRi = int(GPSRc);
  if ( GPSRi == 36 ) {   // <= if the 1st character read is '$' 
    Buffer = "$";
    while ( GPSRi != 42 ) {
      char GPSRc = GPSRaw.read();
      GPSRi = int(GPSRc);
      if( GPSRi < 128 ) Buffer += GPSRc;   // add one character to the buffer
    }
    // if the buffer includes "GPGSV" at the beginning it will be zero
    // check the first six character of the buffer
    // Serial.print does not display anything until "$GPGSV" is found   
       if ( Buffer.indexOf("$GPGSV") == 0 )   Serial.println(Buffer);
  }
}

08/15/2018

M5Stack と専用GPS Function Moduleを使い $GPGSVデータを読んでみた

ハードウェアを、M5Stackに変更して、1つ前の記事で Wemos Lolin32でやった事「$GPGSVのデータのみを表示する」をやってみた

使用した部品は、
M5Stack Basic   (実は、2台所有している)
②M5Stack用GPS Function Module V2 (商品コード:M5STACK-GPS-02
)
        旧型 GPS Function Module

  GPS外部アンテナ付き

Gpgsv_m5stack Wemos Lolin32に対して、M5StackでSketchを変更する(追加する)のは、たったの 2行(2行目と11行目)だけである。

ボードで、”M5Stack-Core-ESP32” を選択するのを忘れないようにすること。

それでやってみたら・・・ 

A fatal error occurred: MD5 of file does not match data in flash!
 
というエラーが表示される。

何か間違ったことをしてしまったのだろうかとSketchを何度も見直し、エラーについて Google先生の力を借りて問題解決しようと試みたが・・・対策方法が良く分からずお手上げ状態。





それで、もしかすると・・・と、もう1台のM5Stackでやってみたら・・・
下図のように問題無く、書込みもパス!
M5stack_pass M5stack_gpgsv
受信結果を右側の図のように表示させることが出来た。

AE-GYSFDMAXBとほぼ同じ場所に置いて比較してみたが、AE-GYSFDMAXBの方が衛星の捕捉数が多いようだ。



Wemos Lolin32の場合、ケースを自作する必要があるが、
M5Stackは、コンパクトに纏められた商品なので、外に持ち歩くには、これが便利だなぁ。






《Sketch》
// Search $GPGSV   forM5Stack 
#include <M5Stack.h>
  HardwareSerial GPSRaw(2);  // ESP32 UART2 GPIO-16 ( RXD2 ) --- GPS TXD
  static const uint32_t GPSBaud = 9600;
  char GPSRc;
  int  GPSRi;
  String Buffer;
  
void setup() {
  Serial.begin(115200);
  M5.begin();
// GPS TXD-pin should be connected to Lolin32 Pin-16
   GPSRaw.begin(GPSBaud, SERIAL_8N1, 16, 17);
}

void loop() {
  if (GPSRaw.available())  searchGSV();
}

void searchGSV(){
  GPSRc = GPSRaw.read(); // read 1 character
  GPSRi = int(GPSRc);
  if ( GPSRi == 36 ) {   // <= if the 1st character read is '$' 
    Buffer = "$";
    while ( GPSRi != 42 ) {
      char GPSRc = GPSRaw.read();
      GPSRi = int(GPSRc);
      if( GPSRi < 128 ) Buffer += GPSRc;   // add one character to the buffer
    }
    // if the buffer includes "GPGSV" at the beginning it will be zero
    // check the first six character of the buffer
    // Serial.print does not display anything until "$GPGSV" is found   
       if ( Buffer.indexOf("$GPGSV") == 0 )   Serial.println(Buffer);
  }
}

Wemos Lolin32にAE-GYSFDMAXBを接続して$GPGSVデータを読んでみた

天頂衛星が捕捉出来るのかが、とても気になるので、ハードウェアは、Wemos Lolin32(以前書き込んだと同じ方法)とし、$GPGSVのデータのみを表示するようにSketchを新たに起こしてみた

使用した部品は、
Wemos Lolin32 ESP32 OLED display付き
②GPS module  AE-GYSFDMAXB
  「日本の準天頂衛星システム(QZSS)『みちびき』3機受信(193,194,195)に対応とある」
③ブレッドボード  サンハヤト SAD-101 ニューブレッドボード
その他、ジャンパーケーブル

ここで込み入った処理を行うと、データを取りこぼしてしまうので、
$GPGSVのセンテンスを表示するだけのsketchとした。
このsketchの応用例として、31行目の”$GPGSV”を他のセンテンスに変更すれば、そのセンテンスのデータのみを表示することが出来るだろうと思う。

Gpgsv 仮組したボードに、このsketchを組込み、窓際の室内で作動させた結果は、左の図のようになった。これを見ると、残念ながら天頂衛星は捕捉出来ていない。


sketchは、「$」で始まり、「*」で終わるセンテンスをピックアップしているので、処理の都合上、チェックサム部分は無視している。






Img_20180815_091233 Img_20180815_091421 尚、Wemos Lolin32は、ボードの幅が広く、これまで使っていたブレッドボードでは、ジャンパーピンを挿すスペースが無く、扱いにくい為、先日Amazonから「サンハヤトSAD-101 ニューブレッドボード」@505円のブレッドボードを購入し、それを使って回路を仮組してみた。

《Sketch》

// Search $GPGSV   for Wemos Lolin32 
  HardwareSerial GPSRaw(2);  // ESP32 UART2 GPIO-16 ( RXD2 ) --- GPS TXD
  static const uint32_t GPSBaud = 9600;
  char GPSRc;
  int  GPSRi;
  String Buffer;
  
void setup() {
  Serial.begin(115200);
// GPS TXD-pin should be connected to Lolin32 Pin-16
   GPSRaw.begin(GPSBaud, SERIAL_8N1, 16, 17);
}

void loop() {
  if (GPSRaw.available())  searchGSV();
}

void searchGSV(){
  GPSRc = GPSRaw.read(); // read 1 character
  GPSRi = int(GPSRc);
  if ( GPSRi == 36 ) {   // <= if the 1st character read is '$' 
    Buffer = "$";
    while ( GPSRi != 42 ) {
      char GPSRc = GPSRaw.read();
      GPSRi = int(GPSRc);
      if( GPSRi < 128 ) Buffer += GPSRc;   // add one character to the buffer
    }
    // if the buffer includes "GPGSV" at the beginning it will be zero
    // check the first six character of the buffer
    // Serial.print does not display anything until "$GPGSV" is found   
       if ( Buffer.indexOf("$GPGSV") == 0 )   Serial.println(Buffer);
  }
}


08/09/2018

2018年7月、プリンスルートを使って富士登山

2018070314 2018年7月13-14日の2日間を使い、富士山を登ってきた。
登ったルートを、持参したGPSでなぞってみると、鳥の形のようで面白い。
僕が歩いたルートは、一日目はこの鳥のお尻の方から上がって、背中を登り、八合目の山小屋で一泊。二日目は首のところまで上がってから頭をぐるっと時計回りに回って、胸の方から降りてきた。登りは、所謂「プリンスルート」を登り、下りは、富士宮ルートを下りた。其々違った体験をして富士山を楽しむことが出来た。

僕は、今年68歳。過去に2回、富士登山の挑戦を行ってるが、3度目にしてやっと山頂まで行けた。
Dscn4553 最初の時は2013年8月30日(左の写真)、吉田口ルートから登ったが、登る際、既に山頂は傘雲が上空にあった。7合目到着の頃には、高山病の為か、頭痛が酷くなり、登山道を吹く風も強く、天候も不順だったので7合目の山小屋で一泊した。早朝4時頃、山小屋を追い出されたが、山頂は相変わらず傘雲で覆われていた。友人と相談し下山した。その前日、登っている際に見かけた若者2名が、五合目のバス乗り場に居たので、どうしたのかと問うと、山頂の風速があまりにも強いので、8合目で下山させられたとの事だった。この時は早めに下山の判断をして正解だったのかもしれない。

20170909 Dsc_7459 私の2度目の挑戦は昨年の秋(2017/9/9)(左に添付したログ結果と宝永の噴火口の写真)、夜中に登るのは体力的に厳しいからと、朝、登山スタートして、その日のうちに降りる弾丸登山に誘われ、富士宮登山口から登った。
誘ってくれた彼らに遅れないようにと同じペースで頑張った為か、8合目に到着した頃には、膝が痙攣して登り続けるのは無理と思った。それで、僕は山頂まで行くのを断念して、友人たちと別れ、一人先に下山した。宝永の噴火口に立ち寄る元気を取り戻したが、もし、無理をしてもう少し上まで登っていたとしたら、スムーズな下山はできなかったかもしれない。

Img_20180713_102844 今回は、3回目の挑戦である。平日でもあり、時期は7月中旬で、人気の低い富士宮ルートなので、空いている。「富士登山は初めて」の友人と2人で登ったが、友人は健脚でもないし、僕は
高山病になって頭が痛くなったり、気分が悪くなるのも嫌だ。
それで今回の登山では、途中の山小屋(赤岩八合館)で一泊し、焦らず
ゆっくり登って山頂を目指すことにした。このルートの山小屋は少ないので、もしこのルートを歩くのなら、事前に予約しておくのが良さそうだ。
登頂ルートは、僕のこれまでの2回とは違い、富士宮ルートでスタートするが、六合目から宝永の第一噴火口を通り、馬の背を通って、御殿場ルートに合流する、プリンスルートを歩くことにした。

Img_20180713_104400 乗用車を水ヶ塚公園の駐車場に停め、シャトルバスで富士宮口五合目に到着後、レストハウス内の食堂で早めの昼食を摂った。
時刻は11時過ぎ頃だったので、食堂も空いていて、注文してから間もなく食べる事が出来た。僕が注文したのは「デミグラソースハンバーグ定食」。値段は確か@1000円だったように思うが、これは美味しく正解だった!昼食を食べてから出発する方には、お薦めの一品だね。


Img_20180713_112232 Photo 食後、ほんの少し休憩し、準備運動のストレッチをしてから、レストハウスを出発した。

山小屋は、8合目の赤岩八合館を選んだ。朝食を摂り、それから山頂を目指すことにした。


事前に収集した情報から、各アクセスポイントの標高値や標準歩行時間をGoogleSpreadsheetでリストにして持っていった。これならスマホで確認することが出来る。このリストには休憩時間は入れなかったが、アクセスポイント間の時間を入れておいたので、標準時間に対する遅れ進みが簡単に把握できたのは便利だった。
下山後、GPS のログデータや、撮影した写真の時刻を確認して、リストに到着した時の時刻を書き入れた。

Img_20180713_114453 Img_20180713_115538 左側の写真が宝永の噴火口へ行く分岐点。
右側の写真は、宝永の噴火口に下りてゆくところ。

富士山での景色は他の山に比べると単調だが、今回選んだルートは、宝永の噴火口を通るので、これまで二回の経験とは少し違った景色の面白さがあった。



Img_20180713_125534 Img_20180713_131153 噴火口の底まで行って、登りに変わると、大きな石がゴロゴロしている他のルートとは違って、今度は細かな瓦礫が脚力を落とす。
そんな場所ではあるが・・・テントウムシが居て、疲れを癒してくれた。





Img_20180713_131328 Img_20180713_132051 Img_20180713_131841 焦って急いで登って高山病にならないようにと気を付けながら、友人の歩調にも合わせて、
そして登っているという実感を楽しみながら登った。
「馬の背」という場所に着くと、はるか前方に山頂が見えた!


Img_20180713_135815 しかし、八合目の赤岩八合館見えていたように思うが・・・、遠くて高い位置にあることを実感する。頑張って歩いてもなかなか山小屋までの距離が縮まらない。
少し後方に居たグループと、最初は一定の距離を保って歩いて居たが、時間の経過と共に、徐々に彼らとの距離が詰まってきて、抜かれてしまう・・・。でも空気が薄い為か、頑張りが効かないので、抜かれた悔しさがいつの間にか消えてしまう。

八合目に近づくと、上の方から「もう少しだ、頑張れ!」という声が聞こえてきた。声援は、自分たちに対するものでは無く、僕たちが馬の背辺りで追い越された、10人ほどの学生たちのグループのものだった。でも元気な掛け声を聞くと、「ヨッシャ!」頑張ろうという気持ちになる。

168236 赤岩八合館は富士山の南東斜面にあるので、沈む夕日は見られないが、誰かが「今しか見られないものが見える!」という言葉を聞き逃さず、山小屋から「影富士」を見る事が出来た。




Img_20180714_045528 Img_20180714_051401 夕食は山小屋定番のカレーライス。17時から食事スタートだったが、テーブルも一杯で順番を待って並んでいる人も多く、人波が引くまでしばらく待ってから食べる事にした。

山小屋の中は個室は無く、寝床のスペースは、3層構造のようになっていたので、かなり多くの人が宿泊できそうだった。
僕は、夜中、お腹の痒みで目が覚めたが・・・どうやら寝ている時にダニにお腹をやられてしまったようだ。


Img_20180714_041711 Img_20180714_052003 ご来光は、水平線辺りに雲があり、太陽は綺麗には見えなかったが、山の上方から望む日の出は、良いものだ!
.





Img_20180714_044845 Img_20180714_050422 前日の疲れや、高山病の症状もとれていたので、朝食はお代わりして十分にエネルギーを補給し、この日の山登りに備える事が出来た。
山小屋の中には、皇太子が立ち寄った際の写真が飾られていた。


Img_20180714_054933 Img_20180714_072845 山小屋を出発、未だ3時間以上登りが続く・・・後で確かめたら、表に記載したように、休憩時間を入れて、4時間43分もかかっていた。朝食でエネルギーを蓄えた筈なのに、酸素が薄いのが効いて力が出なかった。
また、携帯用酸素ボンベを使ったが、効いているような感じがしなかった・・・

Img_20180714_073649Img_20180714_080717 Img_20180714_084938 ようやく、山頂の鳥居が見えた!この時は、遂に到着したと感動した!





《装備と所持品》

身に着けるものは、基本的に化学繊維100%のものにすること。綿は乾いている時の着心地は良いが、汗をかいてしまうと乾くのが遅く、体力を消耗する原因になる。

・長袖Tシャツ(化繊100%又は化繊とウール混紡が良いね。僕は、マーモットのAdvanced Wool MJK-F1044A。 殆どの場合、これ1枚で過ごした。)

・パンツ(伸縮性のある少し厚みのある生地がお勧めかな・・・。僕はモンベルのクリフパンツ#1105498 を着た。)

・レインウェア(上・下)念のためノースフェースのゴアテックス製のものを持って行ったが、使わなかった。

・ウインドブレーカージャケット
 僕はTERNUA製のジャケット(#50033005)
を着た。
   ゴアテックスのレインウェアをウインドブレーカと兼用でも良いね

・手袋(岩の角で怪我をしないように・・・、また日焼け止めも兼ねられる)
  僕は面倒だからってしていなかったら、日焼けで酷い事になった。

・サングラス(紫外線からの目の保護)

・登山靴(軽い登山靴が良い。長い下り坂で、足の爪を痛めないようにするため、自分の足の長さより1.5cmぐらい長めがよい。)
 僕が使ったのは、モントレイルのハイキングシューズ シエラバダミッドアウトドライGM2221 27cm。 僕の足は25.5cm 4E超だが、薄めの靴下で足にフィットし、登り下りでも快適だった。

・靴下(靴と合っていれば多少薄くても良いと思う)


・バッグパック
 僕のは、グレゴリーの
Z30(30リットル)

・ゲーター
 僕は登山前日、これが見つからなくて持参するのを断念しました。無くても大丈夫だが・・・あれば靴の中に小砂利が侵入するのを防げるだろうから・・・


・帽子(僕は丸刈りの頭のままで、帽子も被らず登ったが、日除けにもなるしあると良いかもね。)

・手ぬぐい・ハンカチ(汗を拭ったり・・・)

・ヘッドライト
 早朝暗いうちから山頂まで登るためには、絶対必要。また、登山で計画以上に時間が掛かり暗くなった場合には、これが無いと移動できないからね・・・予備の電池も必ず持参する事。

・懐中電灯
  僕は、Amazonで買った WIBERTAの小型LEDライトを持っていった。
  大きさは、直径2.6cm、長さが10cm程度。単三乾電池で作動するが、充電式電池 14500 800mA 3.7V を入れて使うと、とても明るくて便利。光の拡散も調整できる。山小屋で消灯後使うのに便利。 


・水(僕の場合、500ml x 4本。途中の山小屋などでは補給せず下山まで。)


・携帯食・飴など(注意しないと、暑さで溶けてしまうかも・・・)


・ストック(僕は上りでは殆ど使わなかったけれど、下りでは大変役立った。)


・酸素缶(持って行ったが、個人的には効果を感じなかった。)


・山小屋での着替え(汗で身体が濡れていると、眠れないので、持参した方が良い。)

 僕は、登っている時、殆ど汗をかかなかったので、着替えはしなかった。

・薄手のダウンジャケット。山小屋で寝る際、布団はあるが、案外寒いので・・・これがあると重宝すると思う。また山頂で寒いときに重ね着するにも良い。


 僕は登山中のTシャツの上にダウンジャケットを着て、その上にウインドブレーカーを重ねて着て、お布団に包まって寝ました。


・お弁当について

 一日目は、早めの昼食を摂ってから出発し、夕刻には山小屋到着したので、この日の分のお弁当は不要。二日目は、山小屋で朝食を摂ってからスタートし、山頂・お鉢巡りを済ませた後、休憩所で携帯食としていたお菓子を食べてから下山した。それ以降、下山の途中でお弁当を食べる事は無かった。早めの夕食を御胎内温泉健康センター』内のレストランで摂った。僕は、しらす丼を食べた。

・その他

 バンドエイド(靴擦れやちょっとした怪我用に)、
 濡れティッシュ と ティッシュペーパー、
 頭痛薬(高山病で頭が痛くなった時の為に)、
 その他常備薬、
 日焼け止めオイル、車で行くなら「日焼け後のヒリヒリダウン ひんやりジェル」等あると良いと思います。
 携帯用GPS(登山後、ログ記録を見る為)、
 スマートフォン(富士山では殆どの場所で繋がるようです。ただ電池の消耗は早いようなので、通信しない時は機内モードにしておくのが良いかもね。)
 登山で脚が攣ったりする人は、芍薬甘草湯を持参していると良いかもしれません。

・お土産
 富士山頂の神社でしか買えない御朱印を、登る毎に購入するという人が居た。貴重で入手し難いものなので、
そういうお土産も記念に良いかも。

《富士山の天気予報》
僕は、D-dayの10日ほど前から、何時登るかを決めるために、頻繁に天気予報を確認した。富士山は独立峰なので、予報が難しいらしく、1~2日の間にも大きく変化する。それで、下記にある4つの天気予報サイトを見ながら、決行日を決めたが、決行当日になって4~5日前の予報とあまり変わらなかったのは、①だったように思った。
今、残っている断片的な天気予報の記録を追記しておく。

weather2    Local Weather   Fuji Mountain Weather Forecast
    英語表示
  1週間ほど前からの期間について、3時間間隔の気象予報を表示してくれる。
  2週間前でも表示出来るが、6時間間隔になる。
  僕は下記3項目を主にチェック
   ・Precipitation Amount(降水量) → 僕は、2mmを越えると中止と判断している。
                         強行する場合は、1mm以下かな・・・
   ・Weather(天気)
   ・Temp(気温)

   7/10日の 13日の予報は、9:00~15:00 雨時々晴れ 1mm程度
           14日の予報は、9:00~15:00  午前中は0mm晴れ


Yr  Weather forecast Mount Fuji(Japan)

    英語表示
   7/7日の 13日の予報は、9:00~15:00 1.0mm雨
          14日の予報は、9:00~15:00  0mm晴れ

   7/8日の 13日の予報は、9:00~15:00 0mm曇り
          14日の予報は、9:00~15:00  6.1mm晴れ後雨


mountain-forecast.com
  Fuji-san  Weather Forecast, Japan

  英語表示
   6日間前までの予報で、天気図の表示がある。
   AM(午前)、PM(午後)、night(夜間) の予報でしかない。
   標高値と気温の関係が分かる。

てんきとくらす 富士山(富士山山頂 3776m付近)
  直近2日間は、3時間間隔で表示。3日目から8日目までは1日を纏めた表示。
  登山指数 A(登山に適す)、B(風または雨が強く、やや登山に適していません)、C(風又は雨が強く、登山に適していません) で大まかな登山適否を表示。
   7/7日の
13日の予報は、A
          14日の予報は、A

   7/8日の 13日の予報は、C
          14日の予報は、C
   7/10日の 13日の予報は、A
          14日の予報は、B


《登山後の汗を流す立ち寄り温泉》
登山でかいた汗と疲をとるために、立ち寄り温泉へ・・・。僕が行ったのは、『御胎内温泉健康センター』。駐車した水ヶ塚公園駐車場からもそれほど離れていないし、東名高速道路御殿場ICとの中間地点に位置するのでアクセス的にも便利だと思う。料金は平日なら大人@500円。

08/02/2018

Wemos Lolin32 を使ってNMEAデータの","区切り

Img_20180802_133910 Img_20180802_133950 天頂衛星が受信できるのかを調べたいと思い、Wemos Lolin32 OLED module を使って、
①NMEAのRawデータを受信しシリアルモニター表示する、
②受信したデータを後処理するために、”,” 区切りし、シリアルモニターに表示する

をやってみた。

受信データ間隔は極めて短いので、②の処理を、全てのデータについて一律に処理するのでは、データ区切りと判別処理で『もたついて』いる間に、受信データの取りこぼしをしてしまうことがわかった。

データを区切って、その後の処理に繋げるためには、「処理を行いたい部分のデータに特化したデータの読み込み」などを行わないと、受信データは正確性に欠けるように思う。


使ったパーツは、

Wemos Lolin32 ESP32 OLED display付き  Banggood から購入@1791円

②GPS module「
AE-GYSFDMAXB 」 秋月電子から購入@2100円
③ブレッドボード
④ジャンパー線


結線は、

①Lolin32とGPS moduleとの電源線の接続
②Lolin32の16番ピンとGPS module「AE-GYSFDMAXB
」 のTXDとの接続



ボードの設定、他

①WEMOS LOLIN32  を使う

②GPSとのSerial通信は、HardwareSerial GPSRaw(2) を使う

③赤字で「connecting ...」となったら、ボードの裏側の『Boot』ボタンを長押しして、次のステップに進むようにすること。

《Sketch-1:NMEAのRawデータを受信しシリアルモニター表示》

// for Wemos Lolin-EPS32
static const uint32_t GPSBaud = 9600;

// The serial connection to the GPS device
 HardwareSerial GPSRaw(2);  // ESP32 UART2 GPIO-16 ( RXD2 ) --> GPS TXD

void setup() {
  Serial.begin(115200);
  GPSRaw.begin(GPSBaud, SERIAL_8N1, 16, 17);
}

void loop() {
  if (GPSRaw.available())
  {
    String Buffer = "";
    while (GPSRaw.available())
    {
       char GPSRX = GPSRaw.read();
       Buffer += GPSRX;
    }
    Serial.print(Buffer);
  }
}

Rawデータ出力はこのようになる。
Gpsrawdata












《Sketch-2:GPS受信データを”,” 区切りし、シリアルモニター表示》
ここでは、配列の中に切り取ったデータを入れたが、シリアルモニターへの表示では、Bufferデータをそのまま表示している。(中途半端な処理だとは思うが・・・)

// for Wemos Lolin-EPS32
static const uint32_t GPSBaud = 9600;

// The serial connection to the GPS device
 HardwareSerial GPSRaw(2);  // ESP32 UART2 GPIO-16 ( RXD2 ) --> GPS TXD
String words[25];

void setup() {
  Serial.begin(115200);
  GPSRaw.begin(GPSBaud, SERIAL_8N1, 16, 17);
}

void loop() {
    String Buffer = "";
    int i=0;
    while (GPSRaw.available()) 
    {
        char GPSRX = GPSRaw.read();
        if(GPSRX == ',') {
          words[i] = Buffer;
          Serial.print("word[");
          Serial.print(i);
          Serial.print("]= ");
          Serial.print(Buffer);
          Serial.print("  ");
          Buffer = "";
          i++;
        }
        else
        {
        if(GPSRX == '\n') {
          words[i] = Buffer;
          Serial.print("word[");
          Serial.print(i);
          Serial.print("] = ");
          Serial.print(Buffer);
          Serial.println(""); 
          Buffer = "";
          i = 0;
          }
        else {
          Buffer += GPSRX;
        }
      }
   }
}

コンマ切り出力はこのようになる。
2

データの取りこぼしなどが起きてしまっている・・・

07/07/2018

Wemos Lolin32 OLED module に RobotDyn microSD boardを接続テスト

3 4 Wemos Lion32 OLED module(写真左)に RobotDyn製 microSD board(写真右) を接続した事例がなかなか見つけられずに、関連する情報から探ってみた結果、接続・書き込みが上手くいったので、ここにメモしておく。



先ず、RobotDyn製
microSD boardWemos Lion32 OLEDモジュール のピン接続であるが・・・

次のように接続すること。
  RobotDyn       ESP32
  SD Card   |   Lolin32
--------------------------------------------------
     D3/CS        CS    ⇒ pin14
     CMD/DI      MOSI ⇒ pin25
     GND          GND
     3.3V          3.3V
     CLK          SCK  ⇒ pin15
     DO           MISO  ⇒ pin13
(上記、表内に記載ミスがあり訂正しました。2018/07/11)
次に、僕が行った方法は、Arduino IDE を起動し、
ファイル ⇒ スケッチ例 ⇒ Wemos LOLIN32のスケッチ例 SD(esp32) ⇒ SD_Test を下記のように加筆修正した。

《SD_Test をWemos Lolin32+RobotDyn microSD board で動かすための修正部分について》
①16行目 #include "SD.h" → #include <SD.h> に変更

②17行目 #include "SPI.h" → #include <SPI.h> に変更

③下記4行の define文を17行目の下に追加
  #define PIN_NUM_MISO 13
  #define PIN_NUM_MOSI 25
  #define PIN_NUM_CLK  15
  #define PIN_NUM_CS   14

④setup()の 最初で、
  117行目から118行目 の下記部分を
  Serial.begin(115200);
    if(!SD.begin()){

  以下のように加筆修正
  Serial.begin(115200);
    auto SPI = SPIClass();
    SPI.begin(PIN_NUM_CLK, PIN_NUM_MISO, PIN_NUM_MOSI, PIN_NUM_CS);
    auto speed = 4000000;
    if(!SD.begin(PIN_NUM_CS, SPI, speed)){


5上記の修正で良い筈だが・・・、もしかして私が書き忘れているかもしれないので、問題無く動いたSketch リストを下記に添付しておく。


尚、テスト結果を左に添付しておく。







《 Sketch for "Wemos Lolin32" + "RobotDyn microSD board" SDcard Test 》
/*
 * Connect the SD card to the following pins:
 * RobotDyn  |  ESP32
 * SD Card   | Lolin32
 *    D3/CS    CS   pin14
 *    CMD/DI   MOSI pin25
 *    VSS      GND
 *    VDD      3.3V
 *    CLK      SCK  pin15
 *    VSS      GND
 *    DO       MISO pin13
 */
#include "FS.h"
#include <SPI.h>
#include <SD.h>
#define PIN_NUM_MISO 13
#define PIN_NUM_MOSI 25
#define PIN_NUM_CLK  15
#define PIN_NUM_CS   14

void listDir(fs::FS &fs, const char * dirname, uint8_t levels){
    Serial.printf("Listing directory: %s\n", dirname);

    File root = fs.open(dirname);
    if(!root){
        Serial.println("Failed to open directory");
        return;
    }
    if(!root.isDirectory()){
        Serial.println("Not a directory");
        return;
    }

    File file = root.openNextFile();
    while(file){
        if(file.isDirectory()){
            Serial.print("  DIR : ");
            Serial.println(file.name());
            if(levels){
                listDir(fs, file.name(), levels -1);
            }
        } else {
            Serial.print("  FILE: ");
            Serial.print(file.name());
            Serial.print("  SIZE: ");
            Serial.println(file.size());
        }
        file = root.openNextFile();
    }
}

void createDir(fs::FS &fs, const char * path){
    Serial.printf("Creating Dir: %s\n", path);
    if(fs.mkdir(path)){
        Serial.println("Dir created");
    } else {
        Serial.println("mkdir failed");
    }
}

void removeDir(fs::FS &fs, const char * path){
    Serial.printf("Removing Dir: %s\n", path);
    if(fs.rmdir(path)){
        Serial.println("Dir removed");
    } else {
        Serial.println("rmdir failed");
    }
}

void readFile(fs::FS &fs, const char * path){
    Serial.printf("Reading file: %s\n", path);

    File file = fs.open(path);
    if(!file){
        Serial.println("Failed to open file for reading");
        return;
    }

    Serial.print("Read from file: ");
    while(file.available()){
        Serial.write(file.read());
    }
    file.close();
}

void writeFile(fs::FS &fs, const char * path, const char * message){
    Serial.printf("Writing file: %s\n", path);

    File file = fs.open(path, FILE_WRITE);
    if(!file){
        Serial.println("Failed to open file for writing");
        return;
    }
    if(file.print(message)){
        Serial.println("File written");
    } else {
        Serial.println("Write failed");
    }
    file.close();
}

void appendFile(fs::FS &fs, const char * path, const char * message){
    Serial.printf("Appending to file: %s\n", path);

    File file = fs.open(path, FILE_APPEND);
    if(!file){
        Serial.println("Failed to open file for appending");
        return;
    }
    if(file.print(message)){
        Serial.println("Message appended");
    } else {
        Serial.println("Append failed");
    }
    file.close();
}

void renameFile(fs::FS &fs, const char * path1, const char * path2){
    Serial.printf("Renaming file %s to %s\n", path1, path2);
    if (fs.rename(path1, path2)) {
        Serial.println("File renamed");
    } else {
        Serial.println("Rename failed");
    }
}

void deleteFile(fs::FS &fs, const char * path){
    Serial.printf("Deleting file: %s\n", path);
    if(fs.remove(path)){
        Serial.println("File deleted");
    } else {
        Serial.println("Delete failed");
    }
}

void testFileIO(fs::FS &fs, const char * path){
    File file = fs.open(path);
    static uint8_t buf[512];
    size_t len = 0;
    uint32_t start = millis();
    uint32_t end = start;
    if(file){
        len = file.size();
        size_t flen = len;
        start = millis();
        while(len){
            size_t toRead = len;
            if(toRead > 512){
                toRead = 512;
            }
            file.read(buf, toRead);
            len -= toRead;
        }
        end = millis() - start;
        Serial.printf("%u bytes read for %u ms\n", flen, end);
        file.close();
    } else {
        Serial.println("Failed to open file for reading");
    }


    file = fs.open(path, FILE_WRITE);
    if(!file){
        Serial.println("Failed to open file for writing");
        return;
    }

    size_t i;
    start = millis();
    for(i=0; i<2048; i++){
        file.write(buf, 512);
    }
    end = millis() - start;
    Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end);
    file.close();
}

void setup(){
    Serial.begin(115200);
    auto SPI = SPIClass();
    SPI.begin(PIN_NUM_CLK, PIN_NUM_MISO, PIN_NUM_MOSI, PIN_NUM_CS);
    auto speed = 4000000;
    if(!SD.begin(PIN_NUM_CS, SPI, speed)){
        Serial.println("Card Mount Failed");
        return;
    }
    uint8_t cardType = SD.cardType();

    if(cardType == CARD_NONE){
        Serial.println("No SD card attached");
        return;
    }

    Serial.print("SD Card Type: ");
    if(cardType == CARD_MMC){
        Serial.println("MMC");
    } else if(cardType == CARD_SD){
        Serial.println("SDSC");
    } else if(cardType == CARD_SDHC){
        Serial.println("SDHC");
    } else {
        Serial.println("UNKNOWN");
    }

    uint64_t cardSize = SD.cardSize() / (1024 * 1024);
    Serial.printf("SD Card Size: %lluMB\n", cardSize);

    listDir(SD, "/", 0);
    createDir(SD, "/mydir");
    listDir(SD, "/", 0);
    removeDir(SD, "/mydir");
    listDir(SD, "/", 2);
    writeFile(SD, "/hello.txt", "Hello ");
    appendFile(SD, "/hello.txt", "World!\n");
    readFile(SD, "/hello.txt");
    deleteFile(SD, "/foo.txt");
    renameFile(SD, "/hello.txt", "/foo.txt");
    readFile(SD, "/foo.txt");
    testFileIO(SD, "/test.txt");
    Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
    Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
}

void loop(){

}

07/05/2018

AE-GYSFDMAXB と Wemos LOLIN32 で GPS 受信表示

Img_20180705_165137a Img_20180705_165223a 太陽誘電製の小型GPSモジュール「GYSFDMAXB」をWEMOS LOLIN32に繋いで、GPS受信表示してみた。

GYSFDMAXBは、日本の準天頂衛星システム(QZSS)「みちびき」3機受信(衛星番号193,194,195)に対応した太陽誘電製の小型高感度GPSモジュールで、秋月電子通商から購入した。
基板の大きさや性能等の詳細データは、秋月電子の商品ページから辿ることが出来る。

Wemos Lolin32は、Arduino ESP32 WiFi+Bluetooth デュアルESP-32SESP8266 OLEDモジュール(技適マーク付き)である。OLEDが既に装着されているので、携帯する機器を小型軽量に纏めるには便利かな・・・と思い、Banggoodから購入した。CNからの配送で1179円だった。購入し、これを使おうと思ってから気づいたが、これを使っての事例が少なく、動かせるようになるまで苦労した。

上記のディバイスを使ってのGPS受信結果は、左上の写真のようになった。
GYSFDMAXBの5V電源は、Wemos Lolin32のOLEDモジュール左下にある5V端子から、ブレッドボードの+電源へ、GNDはOLEDモジュールの中央部上にあるGND端子からLolin32のモジュールの下を通してブレッドボードの-端子側へ接続。

GYSFDMAXBの信号ケーブル「TXD」は、Lolin32の16番ピンへ接続した。(写真緑色の線->黄色(Lolin32の基板の下で、16番ピンに接続している))

③OLEDモジュールは、Lolin32の基板内部で結線されている。

《Sketch作成に関して》

①GPSの信号処理では「tinyGPS++」を用いたが、別のArduino基板で製作していたSketchを流用したのでその名残で使ってしまった。別のライブラリを使っても良かっただろうと思っている。

②Lolin32に付いているOLED1306を使うために”SSD1306Wire.h”が必要。
 ディスプレイは内部結線されているので、設定は、
  SSD1306Wire  display(0x3c, 5, 4)   となる。

③GPS信号は、Lolin32に読み込ませるだけなので、HadwareSerialを使うと Serial2で丁度16番ピンに繋ぐことができる。
 それで、HardwareSerial GPSRaw(2) とした。
 また、GPSの初期設定は、
  GPSRaw.begin(GPSBaud, SERIAL_8N1, 16, 17)   とした。
   ここで、GPSBaudは 9600 としている。

④ここまで決めれば、あとは自分の気に入ったように
Display用のSketchを書けばいい。
 面倒なのは、このOLEDは先に描いた場所に上書きすると重なった表示になるので、一度描いたら消さないといけない。これを解消するために簡単なテクニックが要る。

GPS受信のSketchを一度でも書いたことがある人なら、記載したSketchを見れば、処理の方法は概略分かると思うので、あまりSketchの中にコメントは記載しない。

⑤Sketch を書き込むときの注意点
 ・ボードは WEMOS LOLIN32
 ・らいぶらりーとして、ESP8266 and ESP32 Oled Driver for SSD1306 display by Daniel Eichhorn, Fabrice Weinberg Version 4.0.0 をインストールすること
 ・tinyGPS++.h のインストールを忘れないように。
 ・Sketchが書き込まれるときに Lolin32 裏面にある Boot ボタンを 書込みが始まるまで「カチカチ」と押してやる必要があります。これをしないと、Lolinが、「タイムオーバーで書き込めませんでした」と宣のですよ・・・

《Sketch》

// GPS Tracker    Sketch for Wemos LOLIN32  2018/07/05
// The serial connection to the GPS device
  #include <TinyGPS++.h>
  #include "SSD1306Wire.h"   // legacy include: '#include "SSD1306.h"'
  HardwareSerial GPSRaw(2);  // ESP32 UART2 GPIO-16 ( RXD2 ) --- GPS TXD
  const int UTC_offset = 9;  //  Japan Time
  static const int GPSBaud = 9600;
//  static const int MAX_SATELLITES = 40;
  TinyGPSPlus gps;  // The TinyGPS++ object
  TinyGPSCustom totalGPGSVMessages(gps, "GPGSV", 1); // $GPGSV sentence, first element
  TinyGPSCustom messageNumber(gps, "GPGSV", 2);      // $GPGSV sentence, second element
  TinyGPSCustom satsInView(gps, "GPGSV", 3);         // $GPGSV sentence, third element
  SSD1306Wire  display(0x3c, 5, 4);
  
void setup()
{
  Serial.begin(115200);
  GPSRaw.begin(GPSBaud, SERIAL_8N1, 16, 17);
  display.init();
}

void loop()
{
  if (GPSRaw.available() > 0)
  {
   gps.encode(GPSRaw.read());
   if (totalGPGSVMessages.isUpdated())
   {
    display.clear();
    printDateTime(gps.date, gps.time); 
    display.drawString(0,20,"Lat:");
    display.drawString(30,20,String(gps.location.lat(), 6));
    display.drawString(0,30,"Lng:"); 
    display.drawString(30,30,String(gps.location.lng(), 6)); 
    display.drawString(0,40,"Alt:");
    display.drawString(30,40,String(gps.altitude.meters()) + "m");
    display.display();

    int totalMessages = atoi(totalGPGSVMessages.value());
    int currentMessage = atoi(messageNumber.value());    
    if (totalMessages == currentMessage)
    {
     display.drawString(0,50,"Sat:");
     display.drawString(30,50,String(gps.satellites.value()) + " in use");
     display.display(); 
    }
   }
  }
}

static void printDateTime(TinyGPSDate &d, TinyGPSTime &t)
{
  display.setFont(ArialMT_Plain_10);
  if (!d.isValid())
  {
    display.drawString(0,0,"*****");  // 10 character
    display.display();
  }
  else
  {
  char sz[32];
  sprintf(sz, "%02d/%02d/%02d ", d.year(), d.month(), d.day());
  display.drawString(0,0,String(sz));
  display.display();
  }
  if (!t.isValid())
  {
  display.drawString(60,0,"*****");
  display.display();
  }
  else
  {
  char sz[32];
  sprintf(sz, "%02d:%02d:%02d ", t.hour() + UTC_offset, t.minute(), t.second());
  display.setFont(ArialMT_Plain_16);
  display.drawString(60,0,String(sz));
  display.display();
  display.setFont(ArialMT_Plain_10);
  }
}

06/19/2018

自宅の固定電話をPCで受け管理する(CTI連携)

家の固定電話には、迷惑電話が多くかかってくるので、かかってきた電話番号を読み取って、必要な電話だけを受けるように出来ないものか・・・うまい方法は無いものか?と調べてみた。

「PCで電話を受ける」というキーワードで調べると、
電話をかけてきた人を管理することができるFullfree』というフリーで使えるアプリが、スタンドアロンモードのPCで使える事がわかった。

機能が素晴らしいと思う反面、うさん臭くはないかと心配なため、口コミなどを調べてみたが、問題視するようなものは見当たらなかった。
NTTとナンバーディスプレイ契約がされていれば、CTIシステム(Computer Telephony Integration)
というPCと電話を連動して動作させられる機能がある。

NTTのひかり電話の場合、CTIアダプタが不要らしく、
『Fullfree』をダウンロードして、直ぐに電話とPCを連動させることが無料で出来るらしい。

早速
『Fullfree』をダウンロードし、その機能を確かめてみることにした。


《NTT社のひかり電話の場合は、提供されるルーターに CTIシステム用の機能があるためCTIアダプタなしで Fullfree と接続出来ます。》との説明書きがあるので、まず、自宅の光電話の設定状況を調べてみた。

1)ひかり電話ルーターRT-200KI にブラウザからログイン。
 デフォルト設定は、 http://192.168.1.1/  になっている。
  ユーザー名、パスワードを入れて内線設定を確認してみる。

2)電話設定⇒内線番号一覧を確認してみる。
 拙宅の内線番号は、1~7まで有って、IP端末は1~3が「有効」になっていた。

3)IP端末1の設定内容を確認してみると、MACアドレスは空欄になっている。
 それで、ここの画面で変更することも無いので、窓画面の右上の「X」をクリックして RT-200KI 画面を閉じて、次に
『Fullfree』の設定をする。

4)
Fullfree を使うためには、まずデータベースの作成を行う必要が有る。
 Fullfreeをインストール、起動させてから・・・

デモデータを参照して、データベース用のテーブルの内容は、「問い合わせ」のみを使う事にした。したがって、

 データベースの作成は、
 ①保存場所:
   名前、フォルダ 共、そのまま使い・・・

 ②利用する機能:
   これも、CTIシステムと着信履歴を保存する の両方に☑ ←デフォルトのまま

 ③テーブルの内容:
   問い合わせのみに☑

  これで「OK」をクリック。

5)CTI接続機器の設定
 ①CTI⇒CTI設定 
  メニューから設定画面を開いて、「自動検出」ボタンをクリックする。

 ②ポートとひかりルーターが検出される。
  接続、起動時に自動的に接続するに☑⇒「OK」をクリック

これで設定は終了。

あとは、外部から固定電話にかかってくる電話を待って、設定どおり動くかをチェックしよう。

《その後》 上手くいかないなぁ・・・

CTI設定項目があって、着信ポップアップタグの下方に着信履歴を残す項目がある。
履歴テーブルを明示して設定する必要が有るのに、何もしていなかったのが履歴が残らない原因のようだ。

着信履歴テーブルを『問い合わせ』に設定し、日時フィールドを受付日とした。
これで良いかな?

05/23/2018

大杉谷登山口から大台ヶ原駐車場へ縦走

1 22004年9月の台風21号で大きな被害を受けた三重県大台町の大杉谷登山道の「七ツ釜滝~堂倉滝間の約2.3km区間」は、10年ぶりの2014年に開通して通れるようになった。桃ノ木山の家も、今年(2018年)は4月20日からオープンしている。
先日ブログに登山計画を記載したが、2018年5月16日(水)~17日(木)、大杉谷登山口から大台ヶ原を歩いてきた。事前の11日(金)に、日本気象協会の10日間天気予報で、登山予定の2日間の天候を確認し、必要な予約を全てとった。
既に先日のブログには記載していたと思うが、埼玉県の拙宅を出発して、帰宅するまで実アクセスは、下記のようであった。

アクセスの概要

5月15日 朝、自宅を出発、東京駅八重洲南口 10:00発の高速バス「スーパーライナー55号」で名古屋まで行き(名古屋到着予定時刻は、16:01だが、20分ほど遅れて到着した)、名古屋から16:41発 近鉄線(急行)に乗換し、松阪駅(18:12着)まで移動。
Img_20180515_115444 Img_20180515_115648 Img_20180515_181839
  バスは、名古屋までの途中3回のトイレ休憩(其々10分ほどの休憩時間)があった。
  時間はかかったが、@3000円で名古屋まで行けるのだから・・・


写真左から、乗車したバス(4列座席)。昼食に足柄サービスエリアで購入したお弁当。近鉄松阪駅。


Img_20180515_182051 Img_20180515_182701  駅前のビジネスホテル(僕が使ったのは、エースイン松阪)に宿泊。確かにバスは、ネット情報に有る様に小さく感じたが、全般的には快適に過ごせた。
 ・このホテルでは50歳以上のお客様限定割引プランがあって、シングルルームが@5000円で宿泊できた。ウエルカムドリンクサービスもあり、加えて、カフェテリア方式の朝食を無料で戴ける。
 ・ホテル隣(写真の右側)、南東方向側には、「セブンイレブン松阪駅南店」がある。

 僕は、十分な睡眠がとれないと、翌日の山歩きでは直ぐにバテテしまう。
 松阪駅付近に夜行バスで到着して・・・というプランは成立するが、そのプランは諦めて、登山の前日に現地の近くで宿泊し、十分休養がとれるよう計画した。

Img_20180515_200830 Img_20180515_194919 Img_20180515_195206  この日の夕食は、ホテルから南西方向約40mにある「居酒屋竹の子」で摂った。店の看板には、サラリーマン酒場とも書いてある。酒は翌日の為に控え、カウンター席で軽く食べた。牛肉巻(上の写真(中))は、美味しかった。


5月16日
 朝、ビジネスホテルをチェックアウトし、ホテルの隣にあるコンビニで昼食用のおにぎり・お茶などを購入。松阪駅からJR紀勢本線特急で三瀬谷駅まで行き、
  道の駅おおだいから大杉峡谷登山バス(事前に要予約、@2500円)に乗車して、大杉峡谷登山口まで移動。

Dsc_9663 Dsc_9667 Dsc_9675  松阪駅から三瀬谷までは、JR普通列車でも行けないわけでは無いが、三瀬谷駅に列車が到着する時刻は、10:14であり、登山バスが発車する時刻(10:30)までには、あまり余裕がない。また、駅の改札口から「道の駅おおだい」の駐車場まで少し距離があるため、時間的余裕の持てるJR特急ワイドビュー南紀1号を利用する事にした。(松阪駅発9:16→三瀬谷着9:47、特急券と乗車券で@1230円)

Dsc_9671 Dsc_9675_2 Dsc_9679  道の駅おおだいに登山バスが来たのは、10:10頃だった。
 乗り込むと、乗車用紙のようなものを書かされ、料金@2500円を支払った。
 登山バスが登山口バス停に到着したのは、ほぼ正午近くの11:50頃だった。
 バスは、途中トイレ休憩が1回ある。その場所「大杉谷登山センター」では、警察官も居り、登山センターの従業員から入山届を求められるので、事前に書いて準備しておくのが良い。

Img_20180516_112020 Img_20180516_112030  登山マップは、大杉谷登山センターのホームページにあるものが参考になる。
 詳細な地図は、国土地理院の「ウォッちず」を見て確認するのが良い。僕は、これを印刷して持参した。  




・大杉峡谷登山口から桃ノ木山の家まで約6.5km。休憩時間を含め、僕の脚で4時間2分かかった。
Dsc_9688 Dsc_9705  Dsc_9696大杉峡谷登山口の休憩所で昼食を済ませて、宮川第三発電所(12:12, H=289m)→大日嵓吊橋(12:27)→千訪滝休憩所→猪ヶ淵→平等嵓吊橋(15:03)→桃の木山の家(15:45 到着、ここで宿泊、宿の夕食は、定番のカレーライスとトンカツ。1泊夕食+朝食+お弁当で@10000円)
Dsc_0009 Dsc_0011 Dsc_0017
 お風呂は、木の湯船で、男女別に時間を分けられたが、温かいお湯に入り、汗を流すことが出来た。




Img_20180516_173244 Dsc03461 Dsc_0019左の写真は、夕食のカレーライスとトンカツ。
中の写真は、外から食堂を撮ったもの。
右は朝食。





5月17日
 午前5時半からの朝食を済ませ、山の家で作って貰ったお弁当を持って、6時少し前に桃の木山の家を出発。標準歩行時間で見積もると、12時に日出ヶ岳に到着できれば、大蛇嵓を廻って大台ヶ原駐車場にバス出発時刻までに到着できる。
ラッキーな事に、私の脚でも日出ヶ岳に11時前に到着。お弁当の昼食をとり、大蛇嵓を廻って大台ヶ原駐車場まで約13kmの行程を歩く事ができた。休憩時間を含めて、8時間8分かかった。タフなルートである。
Dsc_0038 Dsc_0051 Dsc_0058 Dsc_0072








Dsc_0086 Dsc_0098 Dsc_0150 Dsc_0241








Dsc_0261 Dsc_0262 Dsc_0268 Dsc_0276








Dsc_0316 Dsc_0323 Dsc_0340 Dsc_0345







  七ツ釜滝(6:19)→隠滝吊橋(7:15)→堂倉吊橋・堂倉滝(7:40)→堂倉避難小屋(8:47)→シャクナゲ坂→シャクナゲ平→日出ヶ岳(H=1695m, 10:46到着、ここで少し早めの昼食。11:11出発)→正木ヶ原・神武天皇碑(12:11)→尾鷲辻→牛石ヶ原(12:12)→大蛇嵓(12:25)→シオカラ谷吊橋(13:10)→大台ヶ原駐車場(H=1590m, 13:45)
Dsc_0416 Dsc_0421 Dsc_0435 Dsc_0476







  大台ヶ原の駐車場から、奈良交通のバス(SUICAカードが使える。@2000円)で近鉄大和上市駅(17:22)まで移動。
  
 近鉄大和上市駅(SUICAカードが使える)から、近鉄吉野線・近鉄橿原線・近鉄奈良線を急行電車で乗り継いで、近鉄奈良駅まで移動。

Img_20180517_201754  近鉄奈良駅周辺で「コインランドリーを探した!」と思って勘違いしていた。奈良駅周辺で歩いて行けそうなコインランドリーは、JR奈良駅に近いところにあり、スマホ片手に奈良駅周辺をうろうろしてしまった。もう少ししっかりと探しておくべきだった。

 JR奈良駅周辺にあるコインランドリー
三条(三条町650)に行き、先ず汚れた登山ウェアを洗濯、次に銭湯「敷島温泉(三条町554)」に行って身体の疲れをとり、高速夜行バスのバスターミナル(20番のりば)の直ぐ傍にある「すき屋近鉄奈良駅前店」で夕食を摂って、

 関東バスの「新宿-奈良・五條線(やまと号)JR奈良駅22:27発(3列席、@5980円)」、近鉄奈良駅側の発車時刻は、22:40発に乗車し、新宿バスタまで移動(車中泊、車内にトイレがあるので、途中の降車は無し)を利用し→埼玉の拙宅へ。

 近鉄奈良駅側のバス停「20番のりば」の傍には、「奈良ラインハウス1F 定期観光バス案内所」があるので、バスの到着時間まで過すことができる。

・3泊4日(内、夜行バス車中1泊)、もう何年も前から行きたいと思っていた場所で、ようやく夢がかなった。タフなルートではあったが、自然が綺麗で、楽しい旅行だった。ヒルの心配をしていたが、晴れの天候が暫く続いていたこともあり、被害に会う事はなかった。また機会があれば、是非行って見たい場所である。
・二日目、一緒に歩いて下さった方には、大変お世話になりました。挫折しそうになった際も歩く元気を貰って、当初の希望通り「大蛇嵓」まで行くことが出来たのは、本当に有り難かった。
ありがとうございました。この場を借りて御礼申し上げます。

PS.登山道通行止め、山小屋の代金について 誤記がありましたので訂正しました。(2018/05/29) 

Arduino NANO を使ってEthernet Cable Checker

Arduino_nano_ethernet_cable_checker LANの調子がおかしいので、ArduinoでEthernet の ケーブルチェッカーを作って、調べてみた。
青色のLANケーブル(ストレートケーブル)は僕が作ったもので、カシメ処理に問題があり、信号が正しく届かなかったようだ。白色のLANケーブルは市販品で、信号の問題が無いもの。信号線の不具合は、外観を見ただけでは、不具合があるように見えない。簡単に確認が出来て良かった。
下に掲載した写真では、1枚のブレッドボードの中に2つの回路を置いたが、電源を引かなければならない等の問題は無いので、左の絵のように、其々別のブレッドボード上に置けば、LANケーブルが長くモジュラージャックが離れた場所にあってもチェックができる。
僕がチェックした問題のあるLANケーブル(ストレートタイプ)では、4,5番のLEDが同時点灯し、6番のLEDが消えるという表示になった。市販品のLANケーブルでは、LEDが順番に点灯して行き、そのような表示にはならなかった。


使った部品など

 下記2),3)は手持ちの中に無かったため、Amazonで購入。 その他は、保有品の中から活用
1)Arduino NANO x1個
4)抵抗100Ω 1/4W  x8個
5)LED x8個
6)ジャンパーケーブル
7)ブレッドボード
8)検査用のLANストレートケーブル

Img_20180521_175021 Img_20180521_174957















参考にしたブログなど
  僕は、ブレッドボードの中で完結させたかったので、Arduino NANOを使い、抵抗値は、保有品の中から適当なものを選んだ。
  スケッチは、ほぼそのまま利用させて戴いたが、このブログは自分のメモでもあるので、添付しておく。

《スケッチ》
#define VERBOSE

char straight[8] = {2, 3, 4, 5, 6, 7, 8, 9};
char cross[8] = {4, 7, 2, 5, 6, 3, 8, 9};

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(12, INPUT); // Straight (normal) cable or cross cable
  pinMode(13, OUTPUT); // Control LED
#ifdef VERBOSE
  Serial.begin(9600);
#endif
}

void loop() {
  if (digitalRead(12) == LOW) { // Cross cable
#ifdef VERBOSE
    Serial.println("Cross cable");
#endif
    for (char n = 0;n < 8;n++) {
#ifdef VERBOSE
      Serial.print(n+1, DEC);
      Serial.print(": line ");
      Serial.print(cross[n]-1, DEC);
      Serial.print(" (pin ");
      Serial.print(cross[n], DEC);
      Serial.println(")");
#endif
      PulseOut(cross[n], 1000);
      PulseOut(13, 50);
    }
  } else { // Straight (normal) cable
#ifdef VERBOSE
    Serial.println("Straight cable");
#endif
    for (char n = 0;n < 8;n++) {
 #ifdef VERBOSE
      Serial.print(n+1, DEC);
      Serial.print(": line ");
      Serial.print(straight[n]-1, DEC);
      Serial.print(" (pin ");
      Serial.print(straight[n], DEC);
      Serial.println(")");
#endif
      PulseOut(straight[n], 1000);
      PulseOut(13, 50);
    }
  }
}

void PulseOut(char pin, int ms)
{
  digitalWrite(pin, HIGH);
  delay(ms);
  digitalWrite(pin, LOW);
}

«YHDC SCT-013-000 CT とArduinoで家庭内の電流を測定する

October 2018
Sun Mon Tue Wed Thu Fri Sat
  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      

Recent Trackbacks

無料ブログはココログ