実験室 » Arduino » この記事

ここ最近やってみた工作の練習(3)

ロボット工作でいずれ何かに応用できるのを期待してこのごろ演習をした内容(3)。

 

2.ArduinoからESP-WROOM-02(Wifiモジュール)のシリアル通信を経由して、サーバーにデータを書き込む練習。
BlueToothでのシリアル通信は、以前できたので、今回はWifiで接続実験を練習しました。いずれ、Unity+Wifi+Arduinoの組み合わせで何か作りたいものです。が、今は単体の練習をしないとね。

 

最初は、こちらの記事で練習していたんですが、

 

(Arduinoと数百円のWi-Fiモジュールで爆安IoTをはじめよう)
https://ics.media/entry/10457

 

3ページ目の、ATコマンドで通信速度を設定のところで行き詰まってしまいました。(ノД`)シクシク
どうも指定されている[8ビット双方向ロジックレベル変換モジュール FXMA108]のところで、コケたらしくて、指定通りにしても「goodnight moon!」のまま先に進みませんでした。ソフトウェアシリアルのオブジェクトmySerialの出力をリード線で、0,1ピンに入れてあげると、アルディーノのシリアルモニタに値が出てくるので、オブジェクトは出来ているのが確認できますが、Wifiモジュールに届いていないみたいです。これに関しては、またのちのち調べることにしようかと思います。

 

で、わからんものはわからんので、もうちょっと簡潔に実験してるところを探してみたら、「おもちゃラボ」にいい塩梅に実験記事が載っていたのでそちらをやってみました。これはほぼうまくいったので、興味があったら皆さんもやってみると面白いかと思います。

 

(【Arduino】ESP-WROOM-02( ESP8266 )を使ってWifiで無線通信する )
http://nn-hokuson.hatenablog.com/entry/2017/04/09/091148

 

ロジックボード無しでやると、記事の「ESP-WROOM-02の通信速度を9600bpsまで下げる必要があります」というところの処理部分も引っかかること無くクリアできました。(mySerialが取得できてて、”Hellow, world?”が出力される)

 

20171123_w400h300

 

(´・ω・`)ただー、最後のtest.phpの中で、5行目$filenameってありますが、これでデータファイル開けるものなのでしょうか?自分はなんかうまくいかないので、別の変数を起こして、

 

$readfile = ‘data.txt';
のようにして、

 

$contents = fread($fp, filesize($readfile));

 

と書き換えて、期待する動きになりましたが。うーん?

ここ最近やってみた工作の練習(2)

ロボット工作で(?)いずれ何かに応用できるのを期待してこのごろ演習をした内容(2)。

 

gccをPCに入れてみました。今やVisualStudioで、まとめてなんでもやってくれて便利なのでいらないといえばいらないのかもしれないですが。基礎をやっておくのはいいことだと思いましたので。

 

参考は、こちら

 

(Cプログラミングを用いた数値計算のページ)
http://sa.eei.eng.osaka-u.ac.jp/tatsumi/tani_prog/HOWTOprogC/split.htm

 

阪大の研究室のページなのかな。この中の記事の分割コンパイルのところを読んで練習しました。末尾の#ifdef,#defin,externの使い方の解説はとてもわかり易かったので、理解の整理に役立ちました。

(さらに…)

カスペルスキーの低負荷スキャンとWindows10起動時画面真っ暗トラブル

Windows10を使っているんですが、通常どおりに電源を落として暫くしてから再起動したら(※Windowsアップデートファイルを最後にダウンロードしいていたかは見ていない)、BIOS起動後、ログイン画面に入る前の段階で、画面が真っ暗でマウスポインタのみ表示されるという異常な状態に陥りました。

 

こうゆう現象が起こるという話は以前聞いたことはあったんですが、実際突然自分がこれに直面するとなるとこれは焦ります。(;゚ Д゚) …!?

 

なんの予告も無かったし(※終了時の画面確認しないまま離席した)、何が起こっているのか画面が真っ暗な上、ハードディスクへのアクセスだけが延々と続くというのは、とても気持ちの悪い現象ですね。ハードディスクへのアクセス中にリセットもやりたくないし実に困ってしまいます。 ヽ(;´Д`)ノ

 

但し、マウスポインタは動くし、ハードディスクのアクセスランプは何らかの仕事をしているような感じでしたので、様子見という形で2時間ほど放置しておきました。が、2時間経ってもなんにも変化が無いので、リセットボタンで再起動をかけました。再起動後は特に問題無く、ログイン画面から普通に機動することができましたが、あのハードディスクのランプの点滅の仕方は、ウィルスチェックをしてる時とか、システムのバックアップの類をとっている時の様なせわしないアクセスの仕方でしたので、うちのアンチウイルスソフトのカスペルスキーのログを確認したところ、ちょうど画面真っ暗の時間帯に「低負荷スキャン」というのを一時間半近くかけて実行してるのが確認できました。ログインはしてないけど、OSは起動してアイドル状態だったから、スキャンしておいたよということだったんでしょうかね? どうもすっきりしないですねぇ…。

Windows10のインストールと3TBの壁

メインのマシンの更新という事で、以下の部品を集めて自作PCを作りました。

タイプ メーカー 名称 価格(税込) 備考 列1
PCケース Jonsho U2-BK 6,980 ATX電源可能 ★東映
電源 玄人志向 KRPW-L5-400W/80+ 4,059 300W,ATX電源
KRPW-L5-400W/80+ 4059円というのもあり
(奥行14cmなのでどちらもOK)
アマゾン
マザーボード MSI H110I PRO 10,480 Mini-ITX
DDR4-2133対応
32GBまで(2スロット)
アマゾン
CPU intel Corei5-6600T 27,800 35W,IntelHDGraphics530,単体販売不可
※CPUファン別途
DDR4-2133(PC4-17000)
★東映
メモリ Kingston KVR21N15D8/16 8,745 DDR4 288pin 16GB×1
8GB×2とかでもいい
etrend
HDD Seagate ST3000DM001 7,862 7200回転 etrend
OS microsoft Windows10 Home 日本語 14,862 64bitリテール版 アマゾン
CPUファン silverstone sst-nt09-115x 2,720 LGA1151対応 アマゾン
集計 83,508

省電力タイプを目指しました(インテルのベアボーンにしようかと実は迷った)。本体だけなら、7万ぐらいで作りたいPCが出来上がります。オンボードのグラフィックアクセラレータがどの程度の力を発揮できるのか興味深いです。

さてさて本題は、自作PCの構成自慢についてではなく、Windows10のインストールでつまづいたことについてでした。購入リストにあるOSは、USBタイプのリテール版ですが、これで3TBのHDDを認識させようとすると、いわゆる3TBの壁にぶつかります。OSはインストールできても、2TBバイトまでしか認識できないアレです。1TBまるまる無駄になってしまってます。管理ツール画面からもブートディスクは無論のことどのドライブもGPT形式に変換できませんな。これは困ります。・゚・(ノД`)・゚・。

というわけでやり直し。再インストールです。

マザーボードは、UEFIに対応してますが、BIOS画面で起動順番を指定させる画面を出しても、スティックがただのUSB機器としてしかマウントしませんでした ガ━━(;゚Д゚)━━ン!! ほんとは、UEFI:…なんたらかんたら、とかいう名前で画面上にでてこないといけないのに(;´Д`) 

いろいろ調べてみると、USBスティックがFAT32形式でフォーマットされたものに、インストーラが入っていないとUEFTモードの画面でマウントされないよとか書いてありました。しかも、Windows10のUSBスティックは、NTFS形式のとFAT32形式のどっちでフォーマットされているか曖昧的なことも…><; つまり、このスティックからでは、どうやっても3TBを使えるようには出来ないらしいことが分かりました。(´・ω・`)ガッカリ… 半日ぐらい悩んで(というか悶絶して)、二つの案を考え付きました。 甲案 2TBのHDDを追加で買って、そいつにOSいれて3TBのはデータディスクとして追加。データディスクとして追加するなら、3TBのHDDもGPT化を後からすればマウントできます。…まぁこれでもいいけど、なんか挫折感が残りますねぇヾ(・д・` ) これは、乙案がダメなときにやるということで… 乙案 今なら、Windows7や8の無料アップグレード用にwindows10のインストーラをダウンロードして作れます。で、インストーラは、アップグレードだけでなく、新規のクリーンインストールにも使えたりします。なので、8GBのUSBメモリスティックを用意して、FAT32形式でフォーマットをかけて、そいつにインストーラを仕込んでしまえば、UEFT形式のスティックとしてマウントするんじゃない?という案。ただし、この案の不安点は、リテール版についているプロダクトコードを放り込んでちゃんと認証してくれるか分からないという点ですが、まぁだめもとでやってみました。 結果。 ヽ(´ー`)ノバンザーイ UEFTのUSBとして認識しましたし、箱についてたプロダクトコード入れても問題無しに認証通りました。 P.S パーティションの残骸が消せない場合の対処法とか、参考にしたサイトのリンクも貼っておきます。 (参考)windows10をUEFIネイティブモードでインストールしてみた http://otachrome.blogspot.jp/2015/08/windows10uefi.html (参考)Windowsのインストールが出来ない場合の対処方法2 (UEFI/MBRの違い) http://freesoft.tvbok.com/tips/efi_installation/diskpart_gpt_mbr.html

フォームのPOSTデータを自動送信する仕掛け(備忘録)

日常の作業の中に「ある特定アドレスのhtmlにある記事一覧を定期的に取得して、サテライトサイトのhtmlリストを作るという作業があります。参照元のリストは、割とこまめに更新されているので、更新時に参照元から削除されてデッドリンクになっているサテライトサイトの移植済みの記事のリンクを削除して最新の状態にする」という作業があるんですが、リンク切れをチェックしてくれるサイトに毎回サテライトサイトのアドレスを入力して、フォームボタンを押すという動作が面倒くさい。その一手間が面倒くさいので、デスクトップに置いたアイコンクリック一発で、結果ページが表示されるようにしました。

通常ですと、http://deadlink.tv/ に行って、アドレスを入力後、submitボタンを押してリンク切れを確認しますが、

deadlink

下の方に小さく書いてある「DeadLink.tvをホームページに設置」というページに飛んで、htmlのフォームをコピペしてデスクトップ上にhtmlファイルを作って保存します。

出来たら、ファイルを開いてvalueのデフォルト値を指定アドレスに打ちかえ、後は同じような質問をしていた人[http://oshiete.goo.ne.jp/qa/815246.html]に対する答えの部分を反映して、保存すれば、デスクトップ上のアイコンのワンクリックでブラウザに結果が表示されるようになります。

以下の様なコードにします

<html>
<head>
<title>DeadLink.tv にすぐ飛ばして表示する</title>
</head>

<body onLoad="document.F.submit();">

<!-- DeadLink.tv からコピペ -->
<table border="0" cellpadding="0" cellspacing="0" style="font-size:8pt"><tr><td bgcolor="#ffffff"><form name="F" method="post" action="http://deadlink.tv/" target="_blank"><a href="http://deadlink.tv/" target="_top">リンク切れチェック</a><br /><input name="url" type="text" size="20" value="http://[ここに指定アドレスを書き込む]" /><input type="submit" name="exec" value="Check" /></form></td></tr></table> 

</body>
</html>

ちょっとだけ作業が楽になりました。

P.S そもそも発信元にRSSで更新情報を配信してもらい、それを自動取得して更新すればもっと楽なのですが(2chのまとめ板みたいにね)、やってくれないんだなーチキショー( ´ー`)y-~~

ファイル名を小文字にするバッチファイルについて(備忘録)

デジカメなんかが自動でつけるファイル名は、大文字で名前をつけてくれるのですが、DreamWeaverで画像を貼りこむ時に、いいかげん数が多いと癪に触るので、バッチ処理で前処理することにしました。こうゆうバッチファイルは大抵誰ががすでに作ってくれているものなので、検索して見つけました。そのままバッチファイルとして保存して使えば、なんら問題は無いんでしょうが、書いてあるスクリプトの内容をやっぱり理解した上で使いたいと思うのは人情です。

参考サイト
http://blog.noris.today/?p=372

googleなどで「ファイル名 小文字 変換」とかやるとでてきますね。

で、普段バッチファイルなんかは書かない人が、いきなりこうゆう文を読むとつまづいてしまいます。

FOR %%I IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) ^
DO CALL SET STR=%%STR:%%I=%%I%%

前文の
SET STR=%STR:A=a%

までは、素直に分かる。が、SET STR=%%STR:%%I=%%I%%
のところが、バッチファイルのルールを知らないので「???」となりましたので、備忘録を書いておこうかと思います。

★以下、分かってなかったポイント。
(1) ^ 記号。…正規表現?とか暫く思ってましたが、よくよく考えるとこれはプロンプト文ですので、改行がはいるけどコマンドとしては連続してるよとの意味だった。以下のサイトに説明あり。
(参考サイト)http://pf-j.sakura.ne.jp/program/dos/doscmd/str_circumflex.htm

(2) batファイル全体の構文ルールがそもそもよく分かってないので、ざっと把握したいという…バッチファイル書かないから(;´Д`)そこからだよね。やっぱし。
(参考サイト)http://qiita.com/sksmnagisa/items/8c4c1788af44cc1dc63a
こちらのサイトの覚書、ざっと読むだけでも大掴みで理解できるのでとても助かります( ^ω^ )

(2.5) for文中の、%%I とか。これは、気持ち悪い書き方だけどエスケープ文字がfor文中の変数にはくっつくという説明を読んで理解した。だが、やっぱりなんか嫌。

しかし、for文のところはまだしっくりこない。

(3)SET STR=%STR:A=a% とSET STR=%%STR:%%I=%%I%% がしっくりくるには…
これが、他の言語でいうところのエスケープシーケンスのルールを単純に当てはめると、
後者の中から、エスケープ文字にあたるところを除くと、
SET STR=%STR:%I=%I% となる。これで正しい。最前列と最後尾の%はここでは、無視して、中身を比較する。STR:A=a と STR:%I=%I ここが、ルールを知らないとつまづいてしまう。

前者の解釈では、大文字のAを見つけたら小文字のaに差し替えて、STRに格納するという意味だが、
%I=%Iだと、おんなじものを差し替えてるように見えてしまう。で、初めてみると「???」になった訳ですが、ここには、こうゆうルールがあるのを見つけてきた。

(参考サイト)http://qiita.com/q1701/items/d81e51a64f41ca841da6
このサイトの中程あたりの文章に、「大文字、小文字に変換する」というセクションがある。そこには、

(以下引用)———————————————————
%変数:置換元文字列=置換先文字列% を使う。
置換元文字列の大文字・小文字は区別されないので、以下の動作となる。

%ENV:A=A% ・・・ a または A → A
%ENV:a=a% ・・・ a または A → a

——————————————————————
このルールを知ってれば、ここでやっと納得できるようになる。

確認すると、STRという変数には、対象フォルダにある(処理中の1つの)ファイル名が入っており、
%I=%I も上のルールに従って書き換えると、inで指定されているパターンは全て小文字なので、例えば、a=a という下のケースの書き方に置き換えられる。これで「(%ENVの中身に)a または A(を見つけたら)」だったら、「a」にするという解釈が成立する。

「置換元文字列の大文字・小文字は区別されない」というルールを知らないと「???」となりがちなバッチ処理についてでした。

WordPressのバックアップと復元についての覚書き

WordPressは便利なんで重宝していますが、PHPとMySQLを使ってデータ管理しているのでなんかの拍子にバランスが崩れると激しく壊れるおそれがあってデータのバックアップと復元の演習を行う必要性をずーっと感じていました(めったな事では壊れたりしないので、やらなかったんですが)。が、今回手元に何も入っていないXP機が一機あるのでこれにこのFC2のブログの複製サイトを構築して、データを移植する復元の演習作業を行ってみました。実際やってみて分かった事もあるので、備忘録として書いてますが参考になればと思います。

(さらに…)

ノートン先生とマルウェア

最近マルウェアに感染したマシンを診ました(※キャプチャーを原寸で見るには、画像を二回ぐらいクリックしてブラウザに直接jpgがロードされる状態にする)

以前にもみたタイプのマルウェアだったので、駆逐ツール(ココで配布してる)を使って除去を試みましたが、今回はスルーしてしまいました。またこれも使いましたが、今回はCookieしかひっかけてくれませんでした(メールについてきたウィルスを駆逐する時には役だったんですが…) しょうがないので、タスクマネージャからおかしな動きをしているプロセスを見つけて、バッチファイルが保存されているフォルダと、起動トリガーとなっているレジストリの登録箇所をつぶして手作業でマルウェアを取り除きました。このマルウェアの駆動のカラクリに関しては、トレンドマイクロの分析官さんのブログに詳しく載っているのでそちらを読んでいただければいいと思いますが(参考 「HTAを利用したワンクリックウエアの新たな手口」)、ボタンを押してあやしい「HTA」形式ファイルがダウンロードされた時、このマシンに入ってたノートン先生(期限切れではない)は何してたんだろうかと思いました。トレンドマイクロの該当記事は四年前に投稿されてるので四年経っても未対応なんでしょうかねぇ( ̄д ̄) マカフィーもちゃんと引っかけてくれるのかいまいち信用が無いのでウィルスバスターいれとけばいいんですかね(危ないサイトにはウィルスバスターがブロックしててそもそも行かせてもらえないし)

P.S Vistaのセキュリティに閉口しました。マルウェアがもぐりこんでいる階層に行けないこと。行けないこと。邪魔でしょうがないヽ(`Д´)ノプンプン

WindowsSDK 備忘録 その十二

前回までで構文解析をさらっと通過したので、画面にビットマップ画像を表示するところを追加しています。

教本のCmdMascotSub();以降の部分になります。画像管理クラスを作成し、マップコンテナを作って複数HBITMAPを管理しています。

画像管理に関わるところは…
————————————————————————————-
CImageWindow::CImageWindowのコンストラクタ内で、
// 画像ファイルの読み込み
Images=new CImages();
Image=Images->GetOrNew(image_name);
の部分から、
CImage* CImages::GetOrNew(string file_path)へと渡り、
// 既存のオブジェクトがなければ新規に作成する
CImage* image=new CImage(file_path);
Images.insert(TFileImageMap::value_type(file_path, image));

によって、ここのコンテナに、”pmm1_ask”と、”新規に作成されたHBITMAP情報を持つCImage(単体)オブジェクトへのポインタ”を格納する。このコンテナImagesも静的に配置された(1個しか出現しないのでstaticではない。CImage[単体]のコンテナBmpsはマスコットが複数宣言されれば、その分存在する可能性があるので、コンテナも共用できるようstatic)
—————————————————————————————-
1つの画像に関して上の関係を整理すると、
Imagesコンテナ > Imageクラスのオブジェクトへのポインタ > HBITMAP > bmpファイル
という、関係になっていると解釈されます(左二つと右二つはそれぞれ別のマップコンテナで管理されてますが)

スクリプトindex.mctには、二つのマスコットを宣言してますので、画面には二つの窓が開くようになります。

以上、最小構成のつもりでマスコット宣言の処理の流れを追って教本の内容を整理しただけなのですがそれでも結構な量になっちゃいました。やっぱり大まかにWindowsとクラスの関係を把握するというのが目的なのなら、字句解析以降は省略して、一個の画像を表示するぐらいでコンパクトにまとめた方がおさまりが良かったみたいです。

P.S メモリリークをチェックするように途中からしましたが、これによってちょこちょこ今まで小さなリークの警告がでていたんで教本にはない後処理を追加しています。ただそれでもメモリリークが最後に一個残りました(;´Д`)
一つ目に読み込んだビットマップ画像に関係してると思われるのですが、それがどこかのタイミングでメモリ域に残るみたいです。二つ目のビットマップ画像に関しては残らないのでどうもよくわかりません。マップコンテナに複数画像のHBITMAPを持っているので、終了時にコンテナの中身をチェックしてHBITMAPが存在するなら、DeleteObjectするようにテストしてみましたが、はずれでした。このリークの警告に関しては、解決方法が残念ながらわからないです。残念(`・ω・´)

ソースコード[v11.lzh]

WindowsSDK 備忘録 その十一

トークンに分割する字句解析のところまで進んでるので、構文解析もさらっと流します。マスコット宣言についてのみ流れを追っているので、ParseLine();での字句解析が済むと、教本はCmdMascot();にて、マスコット文の種類の判別に進んでいます。このルーチンでParseExpression();という構文を判別するサブルーチンを行き来します。

教本でも、構文解析のところは難しいと思います云々書いてありますが、ParseExpression();辺りのコードは、チェックのための補助の関数をあちこち呼んだりする一方で、この解析が済むといよいよマスコットクラスのオブジェクトを生成するので、その前準備も必要になり、関数の数がまたまた増えます(マスコット宣言文に関係するコードだけに絞ってるのにね)( ´ー`)フゥー

制作メモでは…

制作メモ[v09] ———————————————————————————–

構文解析を行い、CMascotのオブジェクトを生成するのに伴い、Cvalue、CImage の両クラスも一気に作った。

▼CmdMascotSub(true, mascot_name, image_name, 0, 0);の直前まで
CInterpreter::CmdMascot()から、CInterpreter::ParseExpression()の構文解析部分で動きを把握する為、ログをかなり埋め込んだ。
CInterpExpr.cppの CInterpreter::NewStrConst()で、CStrValue型の配列の int型の 添え字StrConstsPtr を CInterpreterのコンストラクタで
初期化し忘れていたので、プログラムが誤動作した。ここを設定し忘れるとcase TK_STRING:のvalue_stack.push(NewStrConst(token->GetStrValue()));
から戻ってこれなくなる[先に進めなくなる]<==デバッカでスタックに「ぽもも」が二番目(一番目はダミー)の要素として入ってくるか確認する必要がでてくる。 ★例外クラスを追加[宣言…CLexer.h で、EScriptErrorとしてクラス宣言[インライン関数なので、CLexer.cppにはない]  例外クラスのオブジェクトは、CInterpreter.cppの先頭で7個生成。 ------------------------------------------------------------------------------- と、なっています。また、CInterpreter::Continue();では、構造が複雑になってきたので原文に従い、try~catch文を機能させるように戻しています。 分かりにくいところだと思います。なので、ログをいっぱいv09では吐いてます(;´Д`) ソースコード[v09.lzh]

1 / 3123