変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

未分類

ESP8266のキットで遊んでみた

ブレッドボードに Arduinoを 何度も抜き刺しすると壊れそう。
同様に Arduino にUSBケーブルを 何度も抜き刺しすると壊れそう。
そこで、磁石でくっつけるUSB通信ケーブルを使ってみた。

いかにも壊れそうなUSBコネクタの負担は無くなった。
しかし、ケーブルの重みで空中にホバーリング状態にしていると
衝撃でポロっと落ちてしまうので要注意。

まず、ArduinoIDEの設定をESP8566用に変更しなければいけない

詳しくはキットの説明HP参照

差異:

1.ボードマネージャでNodeMCU 0.9は不調だったので1.0を使った。

2.説明の通りにやってみたが、やはり「結構ハマった」

http://osoyoo.com/ja/2016/11/28/3596/  のサンプルの「プログラム前の準備:」と「Libraryのインストール:」を参照

サンプルに ESP8566のWifiをIOTで使う方法を見つけた。

温度センサーの測定値をシリアル通信のログ画面で見るものだが、NodeMCUのサンプルなので、当然ながら・・・ソースの最後の最後で温度を「所定のMQTTサーバにあるブローカにpublish」もしている。妙な送信はしていないハズだが、マズは自己責任を果たす姿勢をみせるためにも、ソースを熟読してからESP8566に書き込もう。

http://osoyoo.com/ja/2016/11/24/use-nodemcu-to-send-temperaturehumidity-data-to-mqtt-iot-broker/

ESP8566のWifiをSTAモードで使う方法を見つけた。

同上

ESP8566のWifiをAPモードで使う方法を見つけた。

https://iot.keicode.com/esp8266/esp8266-ap.php

ESP8566のWifiをAP+STAモードで使う方法を見つけた。

https://relativelayout.hatenablog.com/entry/2017/07/22/211649

しかし、スマホ側のWifiの詳細設定項目が面倒。
1.インターネット非接続時も有効にチェックを入れる

※MDNSを使うといいのかもしれない。

初期の接続は絶不調になるので、根気よくやり直す。

少し遊んでみた感じでは、ESP8266の少ないメモリ(1044464バイトのフラッシュメモリ、81920バイトのRAM)でも簡単なサンプルなら問題無いが、データ量が多くなると不安 。

なので、SDカードスロット付きにLCDを使おうとしたら、ArduinoのMEGA2560専用(UNOも可)のピン配置だったから、 SDカード のパーツを
ついでにESP32Sもポチった

ESP8266のWEBサーバーの応答って
server.on(“/”, 関数); のように書くから、対象ファイル分を登録するのかな?
SDカードの中身をスキャンし、登録した関数の中で、コマンドは server.method()で、URLはserver.uri() で、調べればいいけど。
登録時間とメモリをかなり食いそう。
でも、 server.on()の中身が_addRequestHandler()だったので、addHandler()で汎用のイベント用関数を作ればいいかもしれないが、RequestHandlerの仕組みが判らないのでググってみたら

//以下、&は&に読み替えてください。
class MyHandler : public RequestHandler {
   bool canHandle(HTTPMethod method, String uri) {
     return (uri != NULL) && uri.startsWith("/aaa/");
   }
   bool handle(ESP8266WebServer& server, HTTPMethod requestMethod, String requestUri) {
      /* do brighness stuff here */
      String html = HTML_HEADER "<h1>";
      html += "command=";
      html += server.method();
      html +=  ",";
      html += "url=" + server.uri();
      html += "</h1>";
      html += HTML_FOOTER;
      server.send(200, "text/html", html);
   }
} myHandler;

の様に書けば/aaa/に反応するイベントハンドラになるらしい。
試しに追加してみると
http://192.168.xxx.xxxx/aaa/bbbbcccc.img なら
command=,url=/aaa/bbbbcccc.img
と表示されるので、多分OK。

あとはDHCPさえ実装できればいいなぁ~と思ってたら、

なんと ESP8266 Non-OS SDK API Reference というのがあって、server.begin();の前に

wifi_softap_dhcps_start(); 

って1行追加するダケだった。
それでも、スマホから接続すると「インターネットに接続できません」扱いで無効状態になるので、APをクリックして 再接続を「インターネットに接続できませんが、接続を維持しますか?」の確認メッセージを出るまで繰り返し「はい」 するまではESP8266のAPに繋がらない。
このAPI類はミスってExceptionが起きると、ESP8266のモニターがリセットしてくれるが・・・、初期設定で Exceptionが起きると、 リセット ト ト ト ト ト ト ト ト となり、USBケーブルを繋ぎ直してもモニタの自動アップロードが機能しなくなり再書き込みもできなくなるので、FLASHメモリの消去ボタンが無い開発キットの場合はヤバイそう。

更にググってみると、僕的に最高なESP8266が見つかった。

カブトムシ仮想キーボード Badusb ATMEGA32U4 WIFI ESP-8266 ESP8266 ESP-12E TF マイクロ SD カード開発ボードモジュール

が国内では売っていないようだ。
さて、次はESP32Sの開発キットにmicroSDカードを繋いで・・・
あ、microSDカードに書き込むときには時計が無いと
ファイル作成日時が2000年の元日になってしまうらしい。
RTCシールドも買えばよかった。orz

あと、画像を返す場合は文字ではないので、ヘッダから

File imgFile;
WiFiServer server(80);
WiFiClient client;
・・・
void Drawjpg(String fileName){
  imgFile = SPIFFS.open(fileName, "r");
  client.write(imgFile, HTTP_DOWNLOAD_UNIT_SIZE);
  imgFile.close();
}
・・・以下ハンドラ内
if(ファイルの拡張子==画像){
  hdr = "HTTP/1.1 200 OK\r\nContent-Type: image/jpeg \r\n\r\n";
  client.print(hdr);
  Drawjpg();
  client.flush();
}

みたいなことをしないといけないらしい

動画は無理なのかな。



ESP8266ではじめるNodeMCU IoT MQTT プログラミング 学習キット 実験キット 初心者演習用電子パーツセット (NodeMCU IoT)

安かったので勢いでポチった。

実は後悔してる。

その直後に

Arduino Nodemcu ESP32 KIT、esp32 開発ボード、1.44インチTFTスクリーン、Bluetooth デュアルコア キット、インターネット開発ボード、TFカードとPCMの音楽をサポート、1Wのスピーカーが付属

を見つけてしまったからだ。

ESP8266ということは・・・
前に買ったWeMOSのD1に載っていたのと同じESP-12っぽい。

とは云うもののキットとサンプルプロジェクトの紹介ページがあるので心強い。

Arduino用の2軸カメラマウント(サーボモータ付)をキット付属のリモコンで操作できたら面白いかもしれない。そのマウントにカメラを載せて、WIFIで映像を流せたら、もっと面白いんだろうけど・・・
どうやって映像を受信すればいいのか判らん。

HTMLサービスを作って/camera.mpegをGETしてきたら・・・
ストリームの手順(知らんけど)でタレ流しすればいいのかな?
応用すると APモードで待機させて、/camera1.htmlにそれっぽい画面を作って、カメラ映像mpegとサーボモーターのボタンを配置して、スマホから繋ぐと面白いかな?

月の低解像度映像を受信して月の動きをJavaScriptでカメラを追尾させ、高解像度のWEBカメラ映像を別の /camera2.html をテレビから見るとかできるかもしれない。(WIFI2系統?

暫く月食は無いので、もしかしたら次の月食までには間に合うかもしれない。(大笑

でも、こんなのをベランダに固定してたら・・・
不審なカメラにしか見えない様な気がするなぁ・・・
てかWifiの野外利用は・・・
やっぱりボツかな。orz




【PS4】Ace Combat 7をやってみた

左脚を伸ばすとカカトの中でサクっとかズキっとか痛みが走る。しかし、不思議なことにつま先立ちすると痛くないので、その様に暫く過ごしていたが、 右脚 もあちこち痛み出し、症状が悪化の一途を辿っていくので病院にいってみると「足底腱膜炎?」という診断。

激しい運動をするとなるらしいが、運動不足で筋肉が萎縮してしまい、日常生活がボクにとっては激しい運動になっていたのかもしれない。痛み止めを飲み、カカト、脹脛、膝の3か所にシップを貼ったら楽になった。

筋肉の萎縮 でググってみると、筋肉そのものが減っていく場合と、神経の刺激が乏しくなって萎縮する場合があるらしい。 頸椎症 ならまだましもALSの症状があらわれるのは、50代から70代前半の年齢層に多いといわれ、 中でも一番多いのは65~69歳らしい。

このままアクションゲームが出来なくなりそうな気が段々してきたので、そうなる前に・・・

「VR酔いしそうで購入を先送りしていたPS4のAceCombat7」を購入した。

勿論、 2月18日までに購入するとAceCombat5がオマケに付いてくることも後押ししてくれた。

AC5は普通にできたけど、 AceCombat7ではなぜかフルスロットルしても離陸できない。どうやらR2ボタンのアナログ出力のMAXが下がっていたらしく、中途半端な出力になって離陸を開始できなかったようで、コントローラの設定で、スロットルとヨーのボタンを入れ替え、 スロットル をデジタル(ON/ OFF)にして、やっと離陸。

しかし、慣れないボタン配置で飛んでいると、うっかりヨーとスロットを間違えてしまう。そうなると、上下左右の感覚もおかしくなってしまい、メッチャクチャ。MMORPGだったら完璧な3D酔いになっていたに違いない状況でキャンペーンを444部隊まで進めたところで中断した。

アナログコントローラのレンジを調整する機能なんて無いので、専用コントローラが必須らしい。 VRの前にコントローラだね。

ま、そんな調子なのでオンラインプレイは無理。

でも、ゲーム中は脚の痛みをシカトできるし、何となく体も温まり、血行が良くなってる気がする。また痛くなったらAC7で解消できるかも(しれない



「無能な人」文喜相

一言で云えば無能な人である。

日本に来た時も交渉のネタを持っていたワケでもなく、ただ来日して話をして帰国しただけである。

昨日の天皇の謝罪要求も、チンピラの嫌がらせと同じなので、こちらとしては、変な行動はとらず、有力者の対応を粛々と眺めるに留めるのが筋である。

でも、とりあえず、謝罪要求なんてものが飛び出したのかを考えてみたが、実際問題としてどう外交という交渉をしたものか?全く何も浮かばないから、こんな変なことを言い出しているだけだと思う。

つまり、アリエナイ・シチュエーションが起これば良いな!程度の妄想で、所謂、何かのサプライズの要求(AAで見たことがあるが、2chのスレに、ゴハンマダー?チーン!と合いの手を打っている様な)程度のものであり、実際にそのようなことが起こればサプライズになるのだろうが、#例の問題に関してはどうなるかは不明瞭で、明白なことはただ一つ、当人はすぐさまお代わりを要求し自分の株を上げること。それ以外にこの人に何ができようか?

では、何を云えば最良だったのだろうか

日本なんて一言も入れずに、本国の中で収まる話をすれば良かったと思う。

ps

日本は何度も謝罪していると云う問いかけに

日本は何十度も謝罪していないという 返答 が届いたらしい。

翻訳ミスなのかもしれないが、回数の違いに問題があるとは思えない。

あっち側も適当すぎる返答なんかしてないで、「例の問題は大韓民国の国内問題である、日本は無関係」と言い切って国内でうまくやってくれ。

この項、終了。



【WindowsUpdate】想定外の問題が発生

MSのWindowsUpdateのサーバが再起動したらしく、その影響で各国の中継サーバーが不調らしい。

別にWindowsUpdateを数日遅れてインストしても支障はない。

そう思っていたら

Windows10のMicrosoft Store も不調らしい。

運悪くG5eのHomicide Square 隠された犯罪のアップデートを要求されたが、ストアから更新の反応が全く来ない。

こ・このままでは連日ログインのプレゼントが消えてしまうではないか・・・orz



【EXCEL VBA】SendKeys

{HOME}でホームキーを押せるけど

CTRL+HOMEはどうするのか?

無理なのかと思ってたら

最近のMSDNオンラインにはこっそりとこう書かれています。

Shift キーを押したまま、E キー、C キーを順に押すには、”+(EC)” と指定します。

https://msdn.microsoft.com/ja-jp/library/cc364423.asp

つまり、”+({HOME})” なのだそうです。

SendKeys “+({HOME})” と  SendKeys “^+({END})”  それに DoEvents も

付けるとワークシートの全データを範囲指定できます。

DoEventsが無いと、画面の反映を完了しないので、続きのVBAコマンドが悲しい結果を引き起こします。

また行や列などをロックしている場合、ロックしている範囲は範囲指定できませんので、結局操作マクロの記録結果をそのまま使って

Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
With Selection.Font
    .ColorIndex = xlAutomatic
    .TintAndShade = 0
End With

で、赤字を外す方が良さそうです。

古いEXCELも同じ操作マクロを記録しますが、そのままマクロを実行すると、ColorIndexに対してxlAutomaticを代入するところで範囲外エラーになってしまいます。これは、WindowsUpdateでxlAutomaticの値が変化してしまったのでしょうね。しょうもないバグですが、直してくれる訳が無いので、自分でxlNoneに書き換えるしかありません。




【Node.js】簡易デバッグコンソール

軽い気持ちで、node.jsのreadlineを使ってstdinとstdoutを繋いでコマンドインタプリタを書いてみた。

バラックなソースはそう面倒も無くできた。

// コマンドライン CmdLine.js
module.exports = class CmdLine {
  constructor(cmds) {
    this.cmds = cmds;
    this.reader = require('readline').createInterface({
        input: process.stdin,
        output: process.stdout
    });
    //コンソールからの1行入力処理
    this.reader.on('line',(line)=>{
      var cmdLine = line.split(/,|\s/g);  // コマンドラインの入力をカンマまたは空白文字を区切り文字として処理
      this.cmdAnalize(cmdLine);
      this.prompt();
    });
    // Ctrl+Dの時の処理
    process.stdin.on('end',()=>{
      //do something
    });
    //コマンドリスト
    this.cmds = this.cmds.concat( [
      { name: "exit", help: "終了",   proc: (cmdLine)=>{
        this.log("EXIT:");
        process.exit(0);
      }},
      { name: "help", help: "ヘルプ", proc: (cmdLine)=>{
        this.log("HELP:");
        var msg = this.cmds.map((e,i,a)=>{ return "" + (i+1) + ":" + e.name + ":" + e.help; }).join('\r\n');
        this.log(msg);
      }}
    ]);
    //最初のプロンプト表示
    this.prompt();
  }
  //プロンプト※処理が終わってから出力する
  prompt(msg) {
    if( msg === undefined ) { msg = 'command:(' + this.cmds.map((e)=>{ return e.name; }).join(',') + ')';}
    process.nextTick(()=>{ console.log(msg); });
  }
  //LOG
  log(msg) {
    console.log(msg);
  }
  //コマンドラインの最初の単語をキーワードとしてコマンドリストを検索し実行する
  cmdAnalize(cmdLine) {
    if(cmdLine.length==0 || cmdLine[0] == '') { return; }
    var cmd = this.cmds.filter((e)=>{
      return e.name.substring(0,cmdLine[0].length) == cmdLine[0].toLowerCase();
    });
    switch(cmd.length) {
      // Not found.
      case 0:
        this.log('\'' + cmdLine[0] + '\' unknown command.');
        break;
      case 1:
        // Command execute
        cmd[0].proc(cmdLine);
        break;
      default:
        // Duplex pattern.
        this.log('\'' + cmd.map((e)=>{ return e.name; }).join('\' or \'') + '\' commands. retry.');
        break;
    }
  };
}
// End of CmdLine.js .

テストコードは

// テストコード test.js
const CL = require('./CmdLine.js');
var cmds = [
      { name: "list", help: "リスト", proc: (cmdLine)=>{
        cl.log("LIST:");
      }},
      { name: "last", help: "ラスト", proc: (cmdLine)=>{
        cl.log("LAST:");
      }},
];
var cl = new CL(cmds);
// End of CmdLine.js . 

ハマったのは、コンストラクタの中のコールバックで{ … } の中で、thisを使おうとしたら、thisがプロセスか何かに割り当てられ xxx not function などとエラってしまった。

{ … } を  { … } .bind(this)と書けばいいけど、 { … } の中に { … } があると、.bind(this)が必要になる。

つまり、 { … } の代わりに  { … } .bind(this) と書き続けることになるので、サクっと降参して、無名関数は止めて => 形式にして、thisの割り当てを期待するようにした。

勿論、別ファイルのtest.jsでは無効なので、thisの代わりにnewしたcl変数を指定した。

あ、自前のコマンドはnewする時に引数で渡してください。(汗

で、こんなの書いて何が嬉しいのか?と云えば

> node test.js と打てば

mailServer>node test.js
command:(list,last,exit,help)

と出るので、例えば、test.jsでSMTPとかPOP3のサービスを起動させた場合、jsソース中の変数(ファイリングしているメール・ファイルとかログとか)を自前のコマンドから色々と操作できるのです。

そういうのを作ろうとすると普段は別EXEを作ったり結構面倒なのですが、node.jsなら CmdLine.js をコピってきて、対象サービスにtest.jsなコードをくっ付ければ済むので非常にありがたいです。

後は、CmdLine.jsをもっと短く書ければいいんだけどなぁ・・・(遠い目



Amazonのタイムセールで買ったもの

買ったものは

マウス 無線 薄型 ワイヤレスマウス 静音 2.4GHz 充電式 持ち運び便利 Notebook, PC, Laptop,Macbookなど多機種対応 type-C変換アダプタ付属 日本語の取説付き ブラック ¥1,200⇒¥999

Exwell LEDランタン 高輝度500ルーメン LED懐中電灯 キャンプ 携帯型 cobランタン 電池式ランタン 防水 防災 登山 夜釣り ハイキング アウトドア適用 2個セット ¥ 1,699 ⇒¥999

Zrse(ザスイ)【3in1ケーブル】第六世代 Lightning Android Type-C マグネット式 充電ケーブル 1M 2.4A急速充電 データ転送 両面挿し 強化ナイロンメッシュ編み LED Light付き 磁気吸収データライン ケーブル ライトニングケーブル micro USBケーブル USB Type C ケーブル ミニUSB端子(ワインレッド 1本セット) ¥ 1,650  変わらず

キングストン Kingston SSD 120GB 2.5インチ SATA3 TLC NAND採用 A400 3年保証 SA400S37/120G ¥3,619 +送料¥540 ⇒ ¥ 2,328

⇒の左がポチる前の値引き前の価格なるので・・・注文履歴を見るまではちょっと焦りますね。 SSDだけ後になるけど 他はもう発送済みらしい。

あ、SSDはタイムセール後の価格です。普段より若干高めかな?発送が遅いのは在庫が無いのかな?

ps.2019/02/03 ¥ 4,624 & 配送料無料 高すぎ

マウスとSSDは・・・とにかく安かったから、ランタンはイザという時の為、USB-CケーブルはSH-M08で充電できるか?お試し用です。

それにしても充電ケーブルの世代交代が早いのは今世代の作りが甘いせいなのか?と思うと・・・早く完結して欲しいところですね。



【Node.js】で、メールサーバでも作ろうか・・・

node.js pop3 smtp でググっても何も見つからなかったので、

作ってみよう・・・と云うことでベタなJavaScriptで、

POP3の110ポートを開いて、

Thunderbirdを相手に、打ってくるコマンドを見ながら、相槌を打つ!方式でチマチマと作っていった。

次に SMTPの25ポートも開いて、簡易なメールサーバになってきたものの・・・

ベタなJavaScriptだと、 CRLFが付いてないコマンドが来たり、いくつかに分けてwriteされるとマズそうな感じになったので、公表されているパッケージをもう一度探してみたら、サーバのパッケージには-serverを付けるのが習わしらしかった。

ではDOS窓から、

プロジェクトのフォルダで、node init でpackage.jsonを作り、

npm i –save pop3-server とか

npm i –save smtp-server とか

と・・・適当に打ったらちゃんとパッケージがアルじゃないか!(馬鹿 orz

pop3-serverのREADMEには、Look at the demo_server.js と書いてあった。jsを読んでみると、ほぼそのままパクればいいことが判った。

smtp-serverのREADMEには、See [smtp-server homepage]と書いてあった。こっちは、しっかりとした感じ。

ま、とりあえず、データベースは使わずに、両方のサンプルソースをマージして送受信するメールはmails変数で管理してPOP3のSMTPのコネクションが切れた時にjson形式でファイルに保存。コネクションが出来たら、jsonファイルをロードでいいような気がする。

ただ、そのままjson化すると、メールのタイトルや本文の日本語はJISコード化したものをBASE64にエンコードされてるから中身が読めないので、iconvで変換できないかなと思ったら、インストーラがnode-gypというpython使いで重いのでjconvというのがあるようなので、これでUTF8にしてJSON化した方が良さそうな気がする。

という訳で、外とは連携しないテスト用のメールサーバは簡単に作れそうだ。(※連携するのが、メンドクサイだけだけど・・・)但し、ココに配置するのはチト問題がありそうなので、家庭内サーバに配置しよう。



隣の国を考察

色々問題を引き起こしている西の方の国。

日韓基本条約 << 大韓民国の国内の判決結果

哨戒機に攻撃用のレーダーを照射 << 北の国の船と瀬取り中?

この不等式の成立を説明する内容を読むと、稚拙で、たまに出てくる証拠も捏造率が非常に高い。

そんな訳で、「評価:そう云う考えもあるかな?」というところには全く届かない。

「機械は嘘を付かない」という説明も「(韓国)人は(平気で)嘘を付く」ということしか連想できない。

自衛隊との協議で「脅威を感じる者が、 脅威を感じると云うなら、 脅威は実在する」(だったかな?) なんて説明も、「百辺嘘を云えば真実になってしまう」という言葉を思い出してしまう程度の内容でしかない。

大体にして、「自衛隊を脅威に感じる」のも「自衛隊が無かったころに竹島を強奪した」から 「自衛隊が奪いにくるハズだ」 という思いからくるのだろう。

故に、この竹島が日本に帰ってきてしまうと、自衛隊の脅威感が一挙に厭戦化し、大韓民国の反日政策は、大きく萎むことになるだろう。

なぜなら、誰もいない島に自国の国旗を立てる事と守備隊が駐屯する 島に自国の国旗を立てる事 とでは雲泥の差があり、後者の事を起こすことはとても困難であるからだ。

とりあえず、西の国の人の説明の内容は、西の国の人の心情を説明しているダケで、客観的な事実についてはほとんど説明していない。しかし客観的な事実が全くないと、話が全くかみ合わないので、粗雑な捏造情報を 客観的な事実 として混ぜ合わせて見た目を整えているのだ。(※だから、載っている動画は極端に短い)

捏造 の粗雑さが目に付くのは、西の国の人が 客観的な事実 の重みを軽視している価値観の表れの様に思えるから、いくら工夫しても捏造度はいつまでも高止まりだろう。

しかし、そんな西の国の人の心情の説明をあれこれと推定しながら、その国の人の 心情 に思い当たったとしても、そこから出てくる結論は「大韓民国を北朝鮮の経済制裁の件の監視対象に含める」ぐらいしか思いつかないし、もう少し状況が煮詰まってくると 「大韓民国も一緒に経済制裁 」するしかなくなってくるだろう。

それでも、その心情に突き進む理由あるいは原動力は北朝鮮の核戦力なのだろうか?とチョット思った。

だが、仮に南北朝鮮が統一し、先の心情論説と 核戦力 をセットで外交しはじめたら・・・

「大陸の 地図 の端っこの半島は真っ白だけど、昔は5千万人も人が住んでいたらしいよ?」という未来しか思いつかなかった。




top