2019年12月21日土曜日

ソースコードの挿入実験

どうやったら良いのか分からなかったのでググったらQiitaにGoogle-code-prettifyというのがあったので、早速実験!
無事実行成功! ただ、これだけでは足りなかったので、以下のCSS(元のページ)を追加して、max-heightを加えて縦横スクロールを追加。
これでやっとやりたいことが出来るようになった、、、。

/*
Google code-prettify
*/
pre.prettyprint
{
    border: 1px solid #cccccc !important;
    line-height: 1.5em;
    overflow: auto;
    width: auto;
    max-height: 600px;
    padding: 2em !important;
}
pre.prettyprint > ol.linenums
{
    padding-left: 2em;
}
pre.prettyprint > ol.linenums > li
{
    border-left: 1px solid #cccccc;
    margin-bottom: 0;
}
pre.prettyprint > ol.linenums > li.L0,
pre.prettyprint > ol.linenums > li.L1,
pre.prettyprint > ol.linenums > li.L2,
pre.prettyprint > ol.linenums > li.L3,
pre.prettyprint > ol.linenums > li.L4,
pre.prettyprint > ol.linenums > li.L5,
pre.prettyprint > ol.linenums > li.L6,
pre.prettyprint > ol.linenums > li.L7,
pre.prettyprint > ol.linenums > li.L8,
pre.prettyprint > ol.linenums > li.L9 
{
    list-style-type: decimal;
}
pre.prettyprint > ol.linenums > li.L1,
pre.prettyprint > ol.linenums > li.L3,
pre.prettyprint > ol.linenums > li.L5,
pre.prettyprint > ol.linenums > li.L7,
pre.prettyprint > ol.linenums > li.L9 
{
    background-color: transparent;
}
pre.prettyprint > ol.linenums > li span:first-child
{
    padding-left: 1em;
}
pre.prettyprint > ol.linenums > li span:last-child
{
    padding-right: 1em;
}
/* plain text */
pre.prettyprint .pln { color: #cccccc; }
/* string content */
pre.prettyprint .str { color: #cccc33; }
/* a keyword */
pre.prettyprint .kwd { color: #00cc00; }
/* a comment */
pre.prettyprint .com { color: #cc3366; }
/* a type name */
pre.prettyprint .typ { color: #00cc00; }
/* a literal value */
pre.prettyprint .lit { color: #3399cc; }
/* punctuation, lisp open bracket, lisp close bracket */
pre.prettyprint .pun,
pre.prettyprint .opn,
pre.prettyprint .clo
{ color: #cccccc; }
/* a markup tag name */
pre.prettyprint .tag { color: #3399cc; }
/* a markup attribute name */
pre.prettyprint .atn { color: #00cc00; }
/* a markup attribute value */
pre.prettyprint .atv { color: #cccc33; }
/* a declaration; a variable name */
pre.prettyprint .dec,
pre.prettyprint .var
{ color: #00cc00; }
/* a function name */
pre.prettyprint .fun { color: #cc66cc; }

/*
Deep Sleep with External Wake Up
=====================================
This code displays how to use deep sleep with
an external trigger as a wake up source and how
to store data in RTC memory to use it over reboots

This code is under Public Domain License.

Hardware Connections
======================
Push Button to GPIO 33 pulled down with a 10K Ohm
resistor

NOTE:
======
Only RTC IO can be used as a source for external wake
source. They are pins: 0,2,4,12-15,25-27,32-39.

Author:
Pranav Cherukupalli 
*/
#include "esp_deep_sleep.h"

#define BUTTON_PIN_BITMASK 0x8004 // GPIOs 2 and 15
//#define BUTTON_PIN_BITMASK BIT64(GPIO_NUM_34)|BIT64(GPIO_NUM_36)// GPIOs 34 and 36
unsigned long time0;
unsigned long time1;

RTC_DATA_ATTR int bootCount = 0;

/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
void print_wakeup_reason(){
  time0 = micros();
  esp_sleep_wakeup_cause_t wakeup_reason;

  wakeup_reason = esp_sleep_get_wakeup_cause();

  switch(wakeup_reason)
  {
    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
    default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
  }
  time1 = micros();
  Serial.print("==>print_wakeup_reason() : ");
  Serial.println( time1 -time0 );
}

/*
Method to print the GPIO that triggered the wakeup
*/
void print_GPIO_wake_up(){
  time0 = micros();
  int GPIO_reason = esp_sleep_get_ext1_wakeup_status();
  time1 = micros();
  Serial.print("GPIO that triggered the wake up: GPIO ");
  Serial.print( GPIO_reason );
  Serial.print( " : " );
  Serial.println((log(GPIO_reason))/log(2), 0);
  Serial.print("==> print_GPIO_wake_up() : ");
  Serial.println( time1 - time0 );
}
  
void setup(){
  Serial.begin(115200);
  delay(1000); //Take some time to open up the Serial Monitor

  //Increment boot number and print it every reboot
  ++bootCount;
  Serial.println("Boot number: " + String(bootCount));
  // Following 4 lines from http://wakwak-koba.hatenadiary.jp/entry/20170219/p1
  // to make deep sleep to 4 micro amp consumption, otherwise 27 micro amp?
  esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
  esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF);
  esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_OFF);
  esp_deep_sleep_pd_config(ESP_PD_DOMAIN_MAX, ESP_PD_OPTION_OFF);
  //Print the wakeup reason for ESP32
  print_wakeup_reason();

  //Print the GPIO used to wake up
  print_GPIO_wake_up();

  /*
  First we configure the wake up source
  We set our ESP32 to wake up for an external trigger.
  There are two types for ESP32, ext0 and ext1 .
  ext0 uses RTC_IO to wakeup thus requires RTC peripherals
  to be on while ext1 uses RTC Controller so doesnt need
  peripherals to be powered on.
  Note that using internal pullups/pulldowns also requires
  RTC peripherals to be turned on.
  */
  //esp_deep_sleep_enable_ext0_wakeup(GPIO_NUM_15,1); //1 = High, 0 = Low

  //If you were to use ext1, you would use it like
  esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK,ESP_EXT1_WAKEUP_ANY_HIGH);

  //Go to sleep now
  Serial.println("Going to sleep now");
  delay(1000);
  esp_deep_sleep_start();
  Serial.println("This will never be printed");
}

void loop(){
  //This is not going to be called
}

温湿度モニターデータ検証

取り敢えず何日か走ったので、データをグラフ化して筐体や周辺環境の影響を考えてみました。
 ブルーは参照に室内の温度のデータで、東向きなので太陽光が入ると温度が上昇します。
 日当たりの良い、東側の道路に面したところ(オレンジのグラフ)では、やはり温度が20度を超えるようなところまで上昇し、これが筐体の温度上昇によるのか、周辺の反射熱も測りこんでいるのかは定かでありません。 一番下のグラフは庭の中央部で、日当たりは余り良くありませんので、太陽光が太陽電池に当たるよう少し高いところに置いていますが、此方は適切な範囲を推移しているように思われます。
高い精度を要求しているわけでもないので、当面はこのままにして、「さー、このデータを何に使うのか?」 
ま、朝起きた時に「今日は寒いのかな?」って外気温の参考にはなりますが、、、。

庭の草花の開花時期と積算温度の関係とか? でも、何時からの積算温度? と、結構利用価値が無いのかも、、、。

2019年12月14日土曜日

室外温湿度モニター筐体実験

太陽電池とLiPoで動いているので、太陽電池面には太陽が当たって欲しいのですが、暖められた筐体の温度を測っても意味が無いので、結局は筐体に工夫が必要で、これが結構難題。 
取り敢えず、100均で買ってきたPPの籠の底に断熱テープを張り付けて、屋外で1週間ほど測定してみましたが、結果は右の様に、太陽が出ると急激に温度が上がってしまっています。
 筐体の表面温度はもっと高いので、多分雰囲気温度には近いのでしょうが、ちょっと気がかりなので、筐体内側にゴミ箱にあった1cm厚程の防音用のガラスウールのシートを敷き、その上にアルミ板を固定して、その上に温湿度センサーを乗っけて、設置してみました。 これで、また1週間ほど調べてみるつもりですが、これでも温度が上がり過ぎることになると、手詰まりです。 


自動車に室外温度が表示される機能がついている物がありますが、これってどこで温度測定しているのですかね? エンジンルームや、路面の近く、トランクルームというのはうまくないと思うのですけど、、、。

簡単なようで、結構難しいですねー。 子供の頃から毎日観察して記録をつけるのが苦手(嫌い?)だったので、「それって何とか電子技術に押し付けて、結果だけを後でゆっくり見れたらナ~」 という、昔からのトラウマの解決実験なのですが、何ともうまくゆかない!

筐体がPPなので何年かするとボロボロになるでしょうから、その対策も考えておかないと、、、。紫外線吸収剤入り塗料(PPにくっ付く)!なんてあるのかな?









2019年12月10日火曜日

nanoVNA-Fが到着

シンガポールのデポを26日に出て、成田には翌日について、一週間ほど川崎の税関の軒先で待たされて、昨日ようやく手元に到着。 全体が大きく重たくがっちりしていますが、特に使い勝手は変わらない。 TFTが大きくなったので、画面上での操作が苦労なく出来るのはありがたいですが、全体の作りとしてnanoVNAの方が小型軽量で、個人的にはカッコ良いと思っています。 故障しなければ最高。
で、nanoVNA-FはBH5HNUがTTRFTECHのNanoVNAをFreeRTOS versionに書き換えた物で、firmwareの書き換えなどの方法が違っていて、選択スイッチを押し込みながら電源スイッチをオンすると、USB接続されたPC上に、USBディスクとして認識されているので、そこにダウンロードしたfirmware.binをコピーする、という事の様です。
BH5HNUはアクティブでgitHubでメンテされており、mailing listもアクティブで本人も良く書き込みをしているので、結構安心感がありますが、firmwareのupdate情報とbinaryの在処がまだ見つかりません。
最新のnanoVNAに有ったconfigのメニューが無いのですが、バッテリの電圧表示はありますので、本家にはかなりの所で追いついてはいるのでしょうが、、、。
今回は簡単には壊れないことを期待しています。

> MLで「S21のキャリブレーションが酷いよ!」って書き込みがあったので、実際にキャリブレーションした後にS11とS21をキャリブレーション用の20cm程のケーブルで直結してみたら+6.?dBと表示されていました。 うーん、ちょっと酷いね! 
BH5HNUが次のバージョンアップで修正する、と言っていますが、ソフト開発者の層の厚さからは通常のnanoVNAの方が信頼できるかも、、、。



2019年11月27日水曜日

久しぶりのDX情報:今朝のFT8-LowBand

毎朝、ワッチはしていますが、ここのところあまりコンディションも良くないみたいで、欲しいところも入感していませんでしたので、あまりニュースな話もありませんでした。
今朝は20Z位にZA/IK2RLMが40mで入感していました。何局かJAもやっていましたが、当局からは出来ず。 21ZくらいにはS92HPが80mで出ているようでしたが、此方では聞こえず。 もう少し時間がたてば聞こえてくるかな?と思いながら JTAlertをつけて、もうひと眠り。
「ピンポーン」でしたね。22Z近くから、-10dB前後で入感しており、早速呼んでみましたが、逆にRから呼ばれたりして、些か諦めモード。 でも、下へ行ったり、上へ行ったりして呼び続けて2202Zにやっと返ってきました。 「あれ?JTAlertが鳴っている!」 と思ってみてみると30mでFG5FIがUTを呼んでいる!信号も-17dB位で、出来そうな強さ。 で、呼んでみるも、なかなか返ってこない。 で、パナアダプターで30/40/80mを眺めていると、40mパナアダプターのoverlayに5H3UAが40mのCWで強く入っているを確認。「えい、こっちが先だ!」と思って5H3UAを呼んでいるうちに、FG5FIの30m/FT8が返ってきた。 慌てて30mのFG5FIとのQSOを完了。 それから、5H3UAを40m CWで呼び、2.5Khz up位のところでQSO。
3バンドダイポールは、飛びませんが、こういう時は面倒くさくなくて便利。


80~10mでやっとこさ、1900wkdになりました。年内には1900cfmdにしたいな~。

久しぶりに忙しい朝でした。

2019年11月24日日曜日

50Mhz MLA給電ループ(続きの続き)

給電ループの結合度により、スミスチャート上でどのような軌跡を描くのか興味があったので実験してみました。
メインループ上に重なるように置いた状態(結合が一番強い)で、大きな輪っかが、SWR1の点を含む状態で表示されました。 
それから、5cm程給電ループを下げてメインループから離すと、SWR1の点を含まない少し小さな輪っかが左上に移動して、出来上がりました。 従って、SWR最良点はこの間に存在すると思われます。

メインループから1cm程下げて、給電ループを左右に振れるようにして、今度はSWR最良点を、給電ループを左右に振って調整してみると、確かにSWRが1.0に限りなく近い点に持ってゆくことが出来ました(1.0091になりました)。ただし、非常に小さな動きでSWRが動くのと、人間が近寄った状態では変わってしまうので、微小な左右の動きをサポートするような遠隔駆動装置が必要となる、と思います。
gimpの練習に4枚ほどのスミスチャートを合成して、この間の動きを一枚にしてみました(赤い線は適当に、結合度を疎にした場合の動きを示すために引いてみただけなので、特段の規則性を示すものではなく、傾向を示すだけです)。

 結合度を疎にしてゆくと、赤い太線の右下から左上に向かって、所定周波数の給電点インピーダンスが移動してゆくようです。(今後の資料として)

全然別の感想として、このサイズの給電ループに何百Wも加えるのには、何かちょっと怖い感じがしますね。 もっとも、八木のガンママッチだって同じ話ですね。





2019年11月21日木曜日

50Mhz MLA 続き

先日のMLA48ミーティングでの匠のご指導に従い、メインループをλ/5に小さくして、給電ループを弄ってみました。
1)取り敢えずメインループを118cm長(37.5cmφ)にしてみる。給電ループは94cm(30cmφ)
お、確かに純抵抗ラインを跨いで輪っかになってます。 目標SWRは給電ループの結合度を弄ると調整できそうですが、ここではここまで。






2)メインループは118cm長として、給電ループを54cm長(17.1cmφ)としたら
 給電ループをメインループに近づけたり離したりすると、スミスチャート上の輪っかが、右下から左上に動いているように思われます。 離す(結合度を疎にする)と右下に下がっているように思われます。

気をよくして、更に給電ループを小さくしてみます。


3)メインループを118cm長として、給電ループを35cm(11cmφ)としたら
 メインループから2cm程離したところでも、純抵抗ラインを跨いでいるので、2cm程メインループから離したところで、給電ループのメインループに対する角度を調整すると、SWRのラインが1.0を通る様に調整することが出来ました。

これですね!
でも、給電ループの大きさの規則性については良くわかりません。

後は、ステッピングモーターの駆動部分のRFI処理の方法ですが、手持ちの技適認証取れてないESP8266を利用して、シールド筐体に入れた物をステッピングモーターの傍に置き、外部からは12V電源とup/downのスイッチだけにしてみることにします。 これであれば、MLA48のD-PATも使えるかもしれません。

JR1OAO中島氏が先日のミーティングで紹介していた給電ループの回転装置はスマートで、魅力的でした(使ってみたい)。

MLAは単体では効率も劣るので、場所があれば特に必要ありませんが、先日のミーティングで、JA5KVK小川さんが紹介していた空間多重伝送OAM(orbital angular momentum)にMLAを利用し、複数のMLAを位相給電して、ゲインと指向性を持たせる方法は、可能性を感じさせてくれます。  430Mhzでの小川さんのシミュレーションで8個のMLAへの位相給電でダイポール対比11dBという値が出ていましたが、ちょっと衝撃的







2019年11月18日月曜日

50Mhz MLAの給電ループは?

MLAの給電ループの調整方法がわからないので、昨日のMLA48ミーティングで、匠に聞いてみると、「給電ループを大きくすると、Smith Chartの輪っかが大きく、真ん中の線(純抵抗)を横切るようになる。 そもそも、MLAとしては、外側のループが大き過ぎてMLAじゃない。 λ/5以下にしてみたら」というご意見でしたので、取り敢えず、給電ループを大きくして、測定してみましたら、確かに。
50cmの給電ループを94cmの給電ループにすると、 スミスチャートの輪っかが大きくなり、純抵抗の所を横切るようになりました。 


今のところ191cmのループになっているので、70cm程ちょん切って、λ/5のMLAに仕立て直して、給電ループの調整をすることにします。

後はSWRを1近くに追い込む方法を勉強しなくては、、、。


ESP8266 温湿度モニターの筐体の検討

取り敢えず、100均でPPの小さな容器を買ってきて、これに断熱テープを張り付けて、内部に基板を入れて、窓際に置いて、数日間温湿度を計測してみました。 また、対照として、卓上にブレッドボード上に同じものを作り、これも計測データをサーバーに送らせて、比較してみました。

結果はOMG! 何を測っているのか分からなーい! 断熱テープで太陽光を遮っても、容器内に暖められた空気がこもり、この温度を測ってしまっていますね。 
太陽電池に太陽光を当てて、且つ周りの雰囲気温度を計測するのは思ったより難しそうです。 
今度は、100均で台所で使う少し大きめの網目のPP籠で実験してみることにします。  雨が当たらないように、配置を考える必要があります。 
電子的にはあまり問題はありませんが、筐体には結構頭を使わないといけませんね。これは難しい。





2019年11月13日水曜日

ESP8266 WiFi 温度湿度モニター

そもそも太陽電池、LiPo、充電モジュールを興味本位でAmazonで買ってしまったので、昔考えていたWiFi温度湿度モニターが復活してしまいました。 で、deepsleep(60分は出来なかったので、15分)を使ってこの組み合わせでどの位使えるのか、実証してみようと、100均でPPの容器を買ってきて、取り敢えずバージョンを作ってみました。
取り敢えずのブレッドボードでdeepSleepを確認してみましたが、30分程度にしかならない(60x60x1000x1000と引数に書くと、符号付と解釈される?)ので、15分毎にアップデートすることとしました(3,600,000,000って書くとちゃんと60分になるのかは未確認)。

> 数字を直接入れると60分位になることを確認しましたが、 3600000000を入れても、実際には11:50:21 - 12:45:50 = 55:29と正確ではありませんね。 
ま、esp8266のタイマーに精度を求めるのには無理があるので、もう少し細かい間隔で記録を取って、平均したほうが良いと思います


秋月の46X72の基盤を46X36に2分して、JRCのNJU7223DL1-33を電池からの電源に噛まして、47μFをパラにして安定化を図り、RSTとD0をショートピンでショート出来るようにしただけの超簡単基板ですが、まともに動きますねー。

さて、消費電流ですが、microUSBでPCと繋いでいると常時13mA位流れていますが、プログラムの書き込み後、自走させると、アップロード時に64mA、それ以外は0.01mA或いはそれ以下(使った電流計が0.01mA以下が読めなかった)で、アップロードは数秒で終わりますので、これだとかなり行けそうです。


「さー、これでいけるぞ!」とPPの容器に、断熱テープ(Amazonで購入した、ガラスウールとアルミのラミネート)を張り付け、容器の上に太陽電池、下は解放という形状にしてみました。 
断熱テープって、アルミなので電波シールドになっちゃうんじゃ?とESP8266の基板を取り付けた方は断熱材を剥がしています(こちら側に太陽光が当たらないように設置する必要があります)。 ケース内の取り付けは、両面テープでちょこっと張り付けただけの、超いい加減バージョン!

1週間ほど、室内の窓際に置いて、問題が無ければ、実際に庭に設置して計測を開始することにする予定。
あ、電源のon/offスイッチ付けるの忘れてる!!

使用しているコード














2019年11月10日日曜日

ESP8266 Arduino 続き)

アマゾンで”Aideepen 2個セット ESP8266 ESP-12F CH340G CH340 V2 3.3V USB WeMos D1 Mini WIFI開発ボードD1 Mini NodeMCU IOTボード”を購入しましたが、Serial Monitorがうまく動作しなくて、昨日から四苦八苦していましたが、やっと解決策を見つけました。 (これ、技適マーク無いので、WiFiは使っちゃダメです)。
「ツール」->「ボード」で、LOLIN WeMosがらみの物を指定すると、ちゃんと表示されるようになりました(もっとも、最初に表示されるゴミは相変わらずですが、、、。中国語のバナーかなんかかな?)。
 LOLIN WeMOS, WeMOSで4種類ありますが、取り敢えず、どれでも動いていますが、正しくはメモリの量などでちゃんと選ぶ必要があるのでしょう



早速、ブレッドボード上にDHT11を乗っけてWiFiで定期的に温度湿度を送信できるようにしてみました。 「わーお、なんて簡単なんでしょ。 プルアップ抵抗も何もいらず、あまりにも簡単」


スケッチは、以前作ったもののコピペで、、、。 消費電力を抑えるためにdeepsleep()を使って1時間毎に! ただし、以前deepsleep()では1時間は出来なかったように記憶していたので、ググってみたら、ココが出てきましたが、実際にやるとやはり60分を指定するとうまくゆかないので、30分にすることにしました。 何故60分が出来ないんだろう?

deepsleep()を利用するために、RSTとDPIO16(D0)を接続する必要がありますが、これ接続しておくと、スケッチの書き込みが出来なくなるので、スケッチの書き込みが終了した後にD0とRSTをショートさせる必要があります。

後は、来週以降PPかなんかの容器に入れて、太陽電池とリチウム電池の電源で実際にどの位の期間使えるのか、検証することにします。

 3-4年前に購入した素のESP8266-WROOM2が幾つかあるのですが、うまくプログラムの書き込みが出来なくて、このままでは廃棄かな? 今更メンドクサくなってしまいました。

参考にした記事; 
 WeMos D1 (ESP8266) を動かす
 Get started with Arduino[D1/D1 mini series] 
   ESP8266の真骨頂Deep-Sleepモードの使い方

   ESP-WROOM-02のDeep-sleepはどれだけ寝ていられるのか 



====== Sketch =======

/*
    This sketch establishes a TCP connection to a "quote of the day" service.
    It sends a "hello" message, and then prints received data.
*/

#include 
#include 

#ifndef STASSID
#define STASSID "XXXXXXXX"
#define STAPSK  "YYYYYYYYYYYYY"
#define IDENTIFIER "Garden Center"




//#define IDENTIFIER "Garden East"
//#define IDENTIFIER "Garden West"
#endif
#define DHTPIN 14
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

const char* ssid     = STASSID;
const char* password = STAPSK;
const char* Identifier = IDENTIFIER;

const char* host = "192.168.1.3";
const uint16_t port = 80;

void setup() {
  Serial.begin(115200);
  // We start by connecting to a WiFi network
  /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
     would try to act as both a client and an access-point and could cause
     network-issues with your other WiFi-devices on your WiFi-network. */
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  // dht to start
  dht.begin();
}

void loop() {
  // Serial.print("connecting to ");
  // Serial.print(host);
  // Serial.print(':');
  // Serial.println(port);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    delay(100);
    return;
  }
    // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C\t");
  //Serial.print(f);
  //Serial.print(" *F\t");
  Serial.print("; Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  // Serial.print(hif);
  // Serial.println(" *F");

  // WEB serverにデータをアップロードする。
  String url = "/weather/weather_log.php";
        url += "?location=" + String(Identifier); // ID to identify location
        url += "&temperature="+String(t);
        url += "&humidity=" +String(h);
  Serial.print("Requesting URL: ");
  Serial.println("GET "+url);
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                "Host: " + host + "\r\n" +
                "Connection: close\r\n\r\n");
  delay(50); 
  // Read all the lines of the reply from server and print them to Serial
  Serial.println("Returned message from server: ");
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  client.stop();
  // 30分deepsleepする。
  ESP.deepSleep(30*60*1000*1000, WAKE_RF_DEFAULT); // 60*1000*1000 = 1min, 30 min
  delay(1000); // execute once every 5 minutes, don't flood remote service
}
 







2019年11月9日土曜日

ESP8266 Arduino、、、、

太陽電池、リチウム電池、充電モジュールが手に入ったので、屋外で温度湿度をリポートしてくれるモジュールを作ってみたくなり、昔購入して余っていたESP8266を引っ張り出してきて実験してみましたが、色々と躓いています。
1)3~4年はこの世界では世界が違う!
左が新しいもの、右が昔のWROOM-02
スイッチサイエンスの昔のモジュールにスケッチを書き込もうとすると、エラーが出ます。 あ、Arduino IDEの設定が膨れ上がっていて、色々事前に設定することがあるようです。

 

2)ESP8266にも色々ある
  昔のESP8266って、裸でしたが、最近のは色々周辺がくっ付いていて、プログラム書き込みモードを手動でしなくても良い、Serial port(CH340)が付いていていきなりUSBが繋げる、など随分と進歩していますが、この分IDEの事前設定が必要なのですね。
取り敢えず、ESP8266関連の物が見えるようにする為に、ファイルー>環境設定ー>「追加のボードマネージャのURL」に"https://arduino.esp8266.com/stable/package_esp8266com_index.json"を入れて「ツール」のボードの選択肢にESP8266関連が出てくるようにし、更にボードの仕様に応じてReset等の細かい設定をすることが必要になっています。

3)Arduino IDEのシリアルモニターが文字化けしてうまく動かない!
  色々躓きながら、何とかスケッチの書き込みまでは出来るようになりましたが、シリアルモニタの出力が文字化けして、どうしても治りません! 転送スピードを弄ったら何とかなるかと、9600位まで落としてみましたが変化無し! 化け方が何とはなく、昔見たことがあるような気がするのですが(8bit,Non-parity,1 stop bitが違っている?)、弄るところもないので???

お手上げで、今日は店じまい。





参考にさせて頂いた記事; 
 WeMos D1(ESP8266)を動かす
 ESP-WROOM-02
 ESP-WROOM-02の開発キットを使ってみる




2019年11月6日水曜日

太陽電池、LiPo、、、、

昔、ESP8266で温度、湿度、気圧を測定して定期的に室内のWeb serverにデータを飛ばしてくるモジュールを作りましたが、電源の確保が心配だった(時折電池を取り替えなければならない?)ので、室内にぶら下げていますが、やはり屋外の温度等が測定してみた
い、とずっと思っていました。
時々?入ってくるAmazonのAdで小さな太陽電池や、リチウム電池の充電保護回路などが安く売られているので、ちょっと、意欲が湧いてきて、屋外の温度もWeb serverに取り込む物を再度作ってみようと、少し始めてみました。
取り敢えず、太陽電池と充電保護回路を繋いで室内の日の当たるところで、動作確認してみると、「おー、動く!」。 当たり前か。 
昔のBlog見ながら、温度湿度レポーターを作ることにしますが、もう4年ほど前の事なので、結構忘れていてSketchの見直しから! できれば、ついでに風速計も作ってみたいなー。

今回購入したもの;
 HiLetgo 10個セット 5V 1A 18650 リチウムバッテリー チャージボード Micro USB チャージモジュール プロテクト [並行輸入品] 

 NUZAMAS 4組 5V 30ma ソーラーパネル専門屋出品 超薄型軽量 携帯型 多結晶フレキシブル ソーラーパネル DIY モジュール 

 4個 リチウムイオンバッテリ、3.7V 1000mAhリチウムバッテリ、リチウム 充電式 充電池、保護ボードと絶縁テープ付き、ESP 32開発ボードと互換性あり、Micro JST 1.25


2019年11月4日月曜日

50Mhz でMLA実験

高耐圧のCばかり弄っていてもしようが無いので、取り敢えず50MhzのMLAを作ってみました。 このページのシミュレーションから、ループ径を62cm(全長194.7cm)とした8D-SFA-Liteにして、0.2mm厚のテフロンを10余回巻き付けた10φの銅パイプで2~15pFのコンデンサを借りにぶら下げて同調を取ってみて、同調が取れるのが確認できたので、ステップモーターとArduino Unoの駆動装置を取り付けて、ケースに入れてみました。
 「こんな長い入れ物は無いだろうなー」と思いながら100均見てたら、有りました! パスタのストッカーが手ごろなサイズでした。 で、恰好だけは整いましたが、給電ループの設計方法が分かりません。
「いいや、適当に、、、」という事で、いくつか作ってnoanoVNAでSWRやSmith Chartを見ているのですが、どうも未だに結論は出ていません。 今度、MLA48のミーティングで、誰かに聞いてみることにします。
試作してわかった事;
 1)Arduino Unoはシールドしてないと全く使い物にならない! 電波出したとたんに初期化(setup)に飛んで行ってしまう。
  このシールドをどうしようか、目下思案中。
 2)5Dの外皮で結合ループを作ってみましたが、その長さとSWRの関係は良くわかりませんでした。 ちょうどよい長さ(径?)見たいなものがありそうな感じではあるのですが、、、。 どうやって、追い込んでいったらよいのかが?? 先達にお伺いするしかなさそうだけれど、何かロジックがあるのだろうか?


 nanoVNA saverの表示(40~60Mhzのスイープ); 
59cm
54cm
49cm
46cm
43cm
59cm,54cm,49cm,46cm,43cm長の夫々のループでのデータ。 なんか50cm位のところが良さそうなので、最後は50cmの5Dでループを作り直して、45~55Mhzで測り直してみた物。
50cm


































2019年10月29日火曜日

nanoVNAでSWRを調べてみる

nanoVNAを色々弄っていたので、実際に現用中のアンテナのSWRを測定してみました。
PCのソフト2つ(nanoVNA, nanoVNA saver)を使って測定してみました。v0.3.1からは画面キャプチャが出来るようになったみたいですが、PC側のPythonで拾ってくるみたいなので、私の環境ではあまり、意味が無いような、、、。

 取り敢えず、使い慣れているnanoVNAでHexBeamと自作のトラップダイポールを見てみましたが、24Mhzがちょっと違うような感じですが、結構優秀なSWRパターンですねー。 
nanoVNA saverは使ったことが無かったので、今回初めてですが、一度に色々な情報を見ることができるので、使い慣れればこちらも便利かもしれません。
 左の真ん中辺りに TDRがあり、Estimated cable length: 40.816mと出ていますが、大体合っていそうです。 


50MhzのMLAを実験していますが、給電ループの大きさ、とか位置とかの決め方が良くわからないので、試行錯誤中(ま、この為にnanoVNAが必要だったのですが、、、)。 そもそも、SWRってどこで測るのが正しいのでしょうね~。


nanoVNA displayが真っ白!

「字が小さくて使い難い」とか文句言っていたら、突然画面が真っ白になって何も表示されなくなってしまいました。 要するにbacklitのみがついている! 
で、PCソフトで操作するとちゃんと動いています。 返品期限ぎりぎりだったので、アマゾン経由でKSIENSに問い合わせしてみましたが、結局は60%リファンドで決着、という事になりそうです。
displayが何故か動かなくなった、ということだと当然ソフトの問題?と思ったので、JH4VAJ氏のページを参考にfirmwareのupdateを試みてみました。 USB接続しても"STM Device in DFU Mode"ってやつが見えない。 で、ここでとん挫。
もう一台購入したnanoVNAでvccとBoot0をショートして起動してみると、「お、画面が真っ白」でSTM Device in DFU Modeが見えるようになりました。 で、このページ 
の手順に従い、Zadigでドライバーの入れ替えをして、dfu-util.exeでfirmwareを0.3.1にupgradeしましたが、特に問題なく成功しました。
この状態で、不具合のnanoVNAに繋ぎ変えて(勿論電源を入れて)、そのままupgradeしてみました。 DFU modeで立ち上がっていないはずなので、upgrade出来ない、とは思っていたのですが、「万が一」を期待してやってみました。 すると、Win10のコンソール上は全く問題なく終了しています。 でnanoVNAを再起動してみましたが、やはり画面は真っ白で、メニューには行けません。 
で、PCからnanoVNAというソフトを立ち上げて、FWinfoでversion情報を見てみると(右)、「あれ?0.3.1になってる?!」
displayが動いているもう一つのnanoVNAのversion画面と比べて見てみると、build timeから、どうもfirmwareはupdateされているみたい。 で、PCから1500Mとか上の周波数を指定してみましたが、これは出来ません。 うーん、PC側ソフトの問題なのかな? (nanoVNAは正常なnanoVNAでも900Mhz以上は指定できませんでした) 
残念ながら、firmware入替えてもdisplayは復活せず。 一台はPCに繋いで、もう一台は移動用、という事で我慢することにします。(どうも、display基盤が両面テープでくっ付いているようなので、これをバラしてdisplayが動作しない問題を特定して修理するのはかなり面倒だと思われます。)


2019年10月11日金曜日

PTFE同士って、ほんとにくっつくの?

PTFE用の接着剤と書いてあった、シアノアクリレート系の接着剤をamazonで購入しましたが、プライマーが添付されていなかったので、「いくらなんでも、これだけではくっ付かないだろう」と思って、販売元にメールしたら、案の定「プライマーで処理しないとくっ付かない」との事で、プライマーを購入しました。250ml 1万円余! 高い!
到着したプライマー見ると、イソプロピルアルコール、メチルシクロヘキサン、アセトンの混合物(要するに、強い有機溶媒の混合物)。 「おい、何だ! これって有機溶媒の混ぜ物じゃん。ほんとにこんなんでくっ付くんかいな?」という事で実験。
直接触るのは憚られるので、綿棒を浸してPTFEのシートの切れ端にゴシゴシ擦り付け、 折角なので3Mの瞬間接着剤(シアノアクリレート系)と、PTFEも接着できると謳っているFRONT 107の両方で試してみました。
Ora! FRONT 107では確かに接着出来ますが、3Mの接着剤では接着力が弱くてダメでした。 接着強度は極大では無いにしても、ちゃんと接着出来ていますので、今回の目的の為には十分使用に耐えることが確認できました。

混合比が問題なのかもしれませんが、プライマーの中身から見ると大学の研究室で、チョコチョコっと作れそうなので、1万円余は高いなー。 それと、PTFEも、この程度の有機溶媒の合わせ技で表面が荒れるんですね~。
 あ、揮発性の有機溶媒なので、使用する時は火気厳禁、換気の十分な場所で行う事!



アンテナ切り替えの自動化 (続き)

 調子よく動いていると思っていたら、インジケータのLEDが次々と点かなくなってゆく、、、。 不精して、出力端子(14Vのon/off)にLEDを直列抵抗と入れていたのですが、これではダメっぽい。 LEDが死んでいる。 では、という事でFETのスイッチを入れて、ゲート電圧で検出して...