Feeds:
投稿
コメント

Archive for the ‘Pi’ Category

とりあえずログが取得できた

 ちょこちょこといじっていたPicoWの温湿度計測システム(笑)がとりあえずデータが取れるようになった。

 まずは、温湿度が測定できるようになった後、温湿度のデータをPicoWのストレージに保存して、Thonyで読み出す事にした。これはまぁ簡単にできた。会社で実際にデータを取って色々と解析出来たので、まぁ投資した甲斐があったかな。

 それで、データを読み出すのに、PCと繋いでPicoWに入ったデータを取り出すなんてのはスマートじゃない。ってことで、せっかくPicoWにはWiFiがついているんだからこれを使わない手は無いよね。でもそのまま使おうとするとAPに接続する必要がある。もちろんAPは会社にもあるけど、勝手に私物の機器を会社のネットワークに接続することは出来ない。AdHocでiPadとかに接続することはできることは、以前ラズパイでやったのでできるはずなんだけど、どうやったのか今となっては記憶なしw。
 色々Web徘徊をしていたら、どうやらPicoWの無線チップでBLEが使用可能になったという記事を見つけた。それなら、BLEでiPadに繋いじゃえ!ってやってみたけど、PicoWの方は問題無くペリフェラルになるんだけど、iPadの方がうまく受けてくれない。iPadはPythonista3でコードを書いた(ほとんどコピべで)んだけど、どうもこれが動いてくれない。

 結構Pythonistaで時間を使ってしまい気持ち的にも折れちゃったので、ラズパイを出してきた。で、PicoWからのBLEデータをラズパイで受けて本体にデータを保存するようにした。ひとまずこれで無限にデータがロギングできるようになった。表示は必要ならつければ良いので、ひとまず完成かな。

 あとはネットワークに入れればって前提はあるけど、PCなしでPicoWからダイレクトにデータをネット上のサーバーにあげるって方法も試した。データサーバーは、Ambientさん。サンプルコードがあって、ちょちょっと変えて完了ととても簡単にできちゃう。部屋の温湿度を外でiPhoneとかで見えちゃうんだからすごいよね。まぁ、自分の部屋の温湿度が見れてもねぇ……。

Read Full Post »

 今週末は家に帰らず仕事して、日曜日は部屋に居たのでPicoWの温湿度測定の課題をやる。朝からやってすぐにできるだろうと思ったらなかなかセンサーからの出力を取ることができない。MicroPythonのコードの問題だと思って、Webを色々徘徊してやっても駄目。センサーが不良品なのかと思って、これまで使っていたDHT11を使ってみたけどやっぱり駄目。一体何が問題なんだ?と半日悩んで、ふと配線したブレッドボードを見ていたら、あれ?バスラインが切れてる??。今使っているブレッドボードは結構長いやつで、上下のバスラインの印刷(赤と青)に切れ目が2箇所入っているが、バスラインだから全部つながっているものだと思っていたけど、ここで切れてるっていう意味だった。つまり隣のブロックにセンサーを置いて、バスラインから給電した(つもり)ので、パワーが入っていなかっただけだった。隣のブロックのバスラインをつなげたらあっさりと温度&湿度とタイムスタンプが表示できた。
 やれやれ、なんと初歩的なミスだろう……。半日まるまるロスしてしまったので今週はここまで。来週に続く….w

Read Full Post »

RaspberryPi PicoW

 仕事の環境は温湿度が非常にシビアなんだけど、記録が自記温湿度記録計でだったりして今どきどうしようもない….(汗。デジタル化するのは簡単だし価格も安いのでそちらは会社でちゃんとやるとして、以前ちょっと部屋の温湿度をログろうと温湿度センサーを買ってラズパイでデータを取って遊んでたのでまずそいつで現状のデータを取ってみようと考えたんだけど、ラズパイを動かすのに親機が必要だし邪魔だし…。そういえばラズパイのちっさいやつがあったなぁと調べてたら、今PicoっていうDIPサイズのマイコンがある事を知った。パソコンじゃなくてマイコンだよ。さらにPicoにはWiFiチップを乗せているPicoWってのもあってこれなら無線でデータ取れるよね、ってことでネットで購入。価格は千円台で購入できた。安っ!。
 PicoWのスペックは、デュアルコア133MHz  メインメモリ264Kバイト ストレージ2MB  USB1.1 Wi-Fi4。これを動かすファームウェアはWebからダウンロードできる。プログラム言語はC言語とPythonが使えるらしいけど、C言語は未開拓なのでMicroPythonで。同時に開発環境としてThonyをMacBookに入れて準備完了。ちょこっとデモプログラムを書いて実行させて動作確認完了。いやー簡単に開発の環境が整った。昔はこうじゃ無かったな〜。で、色々思い出した。

 40年前の自分の卒業研究が、とある圧力変動のモニタリングシステムを構築するというものだった。ちなみに自分の専攻は電気でも電子でもプログラミングでもない。『とある』の方が専攻だったけど、当時からPCとかプログラムとかに興味があって、研究室の教授もその道に理解があったのでちょっとテーマとしては異端だったけどそんなテーマで卒業研究をすることになった。
 当時といえばPC8001を始めとして個人がコンピューターという代物を購入できるようになった黎明期。あまり裕福な家庭ではなったけど、英語の勉強になるって嘘をついてPC8001を親におねだりしてローンを組んで買ってもらった。もちろんカラーディスプレイじゃなくてグリーンディスプレイ、フロッピーディスクなんていう外部記憶装置は高くで買えないので、記憶媒体はカセットテープねw。
 結局、そのPCは雑誌に掲載されていたゲームプログラムを必死で入力して遊んだだけったけど。でもまぁ、今も仕事でPCをフル活用できているのはそんな子供の頃に大金を投資してくれた親のおかげかもしれないけどね。
 話を戻して、そんなPCゲームオタクだった自分の卒業研究だけど、ゼロからの出発だった。雑誌トランジスタ技術に掲載されたワンボードマイコンの記事を参考に電子部品やユニバーサル基板を電子部品小売店に出かけて買って来てはハンダ付けして手作り。CPUはなんだったか覚えてないけど8080?なんかその辺りかな?。マイコンを動かすためのファームウェアはROMに焼かないといけなくて、ROMライターなんて学校に無かったので、八木山のキャンパスまで行って焼かせてもらったりした(笑。マイコンの動作プログラムはアセンブラで書かないといけないので、アセンブラを独学してなんとか動くコードを書いてマイコンで圧力センサーを読み取る事ができるようにした。アナログをオペアンプで増幅してADコンバータでデジタル化というところの電気回路も自作したんだよなぁ…..。
 マイコンで取った圧力データを母艦PCで処理するんだけどこれも大変だった。研究室にあった母艦のPCはIMSAI8080(今なら博物館もの)。8インチFDで動くOSはCP/M、プログラミング言語はFortranだった。これも使いこなせる人は周りには居なくて、ほぼマニュアル(しかも舶来品だから英語)と格闘でなんとか処理プログラムを書いた。計測した結果を出力はEPSONのドットプリンターで印字したんだけど、文字しか出力しないはずのドットプリンターで圧力グラフを出力できるようにプリンターのファームに近いところのプログラムまで仕込んだ。
 とりあえず卒業研究として測定まで出来たところまでまとめられて良かったけど、今思うと良くやったなぁ…..。まぁ、お陰で一年間ずっと研究室に居た感じ。FM仙台を聴きながら、電気コンロでサッポロ一番塩らーめんを啜ったりしながらキーボードを叩いてた。それだけしかしてなかったけど、とても楽しくて熱い一年間だった。

 そんな事を1年かけてやってたのが、あっという間にできちゃう(まだ作ってないからなんともだけど、たぶん数時間)んだね。テクノロジーの進化はすごい。
 で、40年前に今の当たり前な事を一人で手作りしてやってた自分もすごい!。誰も褒めてくれないので自分で褒めておく(笑。
 

Read Full Post »

 今日も午後からOBD弄り。とりあえずBTでPiと繋がったんだけど、案の定JB23-4型のK-LINE2プロコトルはOBDライブラリでは読み出してくれない。まぁそりゃそうだよね。

 ということで、OBDライブラリは諦めてダイレクトにデータを読み出しができないか検討することにした。調べると、結局OBDてのは、ATコマンドとPIDというコードを送信して、アンサーバックされるデータを受け渡す役割との事。それなら、全部のデータは無理でも必要なコマンドとコードを送信、データを受信してログへ記録。そのぐらいのコードなら書けそうだよね。そっちの方向に行ってみよー。

rfcommの設定

 先人達の記録をみると、OBDアダプタ(ELM327)とはBTで接続することになるんだけど、中身はシリアル通信で行っているらしい。で、それに使うのはrfcomm。rfcommを使うにはシリアルポートにrfcommbindしないとダメらしい。バインドって何?って感じだけど、ソフト上の通信ポートを設定するって感じかな?。バインド先は/dev/rfcommXで設定できる。今回は0を指定。
 lsでrfcomm0ができてたら設定OKらしい。後はこのポート0を開いておくためにlistenしておく。ポートの後の1はチャンネルらしいけどとりあえず今回は1で。&はバックグランドで動かしておく為に必要。

sudo rmmod rfcomm
sudo rfcomm bind 0 AA:BB:CC:11:22:33
ls /dev | grep rfcomm
sudo rfcomm listen 0 1 &

接続確認してみる??

 通信ポートを開いて送信されてくるデータをどうやって表示させるのか?。ってのが次の問題。ラズパイのコードを入力してる端末には何も表示されないし……。とりあえず、PythonでOBDライブラリからアクセスアクセスしてみる。ん〜。繋がっているのかな??。一応、status()は繋がったって言ってきてるので、通信は出来てる感じなんだけど。そもそもOBDライブラリのプロコトルはSUZUKI用じゃないからねぇ、ターミナルでやらないとダメなんだけどね。さて、どうやって通信するかな?…..と、その3にたぶん続く…..

Read Full Post »

 今週末は仕事もあるのでどこへも行かず。天気は今日より明日の方が良さそうなのでJB23弄り。
 先日、ブーストを見たくて導入したOBDアダプタ。Androidのアプリで目的は達成できたんだけど、ログも取りたいなと。Web見てみると前例はやっぱりあるね。PythonにはOBDライブラリがあって、これを使って接続しているみたい。JB23は標準のOBDプロコトルじゃないからそのままじゃ使えないけど、単純ログならなんとかなるんじゃね?とダメ元で見切り発車〜。

まずはRaspberryPiとの接続

 とりあえずOBD2アダプタがBluetoothなので、RaspberryPi3で受信できれば後はPythonでなんとかできそうな気がする。ただ、繋がったとしてモニターキーボード、マウスなどのデバイスどうする?って話だけど、RaspberryPiの開発環境としてVNC接続してMacやiPadで操作してるからそれを持ち込めばOK。でも、VNCは自宅ネットワーク環境で繋がってるので、ネットワーク環境が無い外で使うためにはラズパイとiPadをAdHocで繋ぐ必要がある。

RaspberryPiとiPadのad hoc接続

 どうやって繋ぐかって話はWebにも沢山事例があるので細かな話は割愛、自分は下記で接続できたので自分用の備忘録。他に設定があったような気がするけど忘れたw。

  • RaspberryPiのネットワーク設定
    以下のファイルにコードを追記して再起動。自宅ネットワークに戻るときはコードをコメントアウト。

# sudo nano /dev/etc/network/interfaces

# ファイルに以下を追加
auto wlan0

allow-hotplug wlan0

iface wlan0 inet static
address 192.168.#.###
netmask 255.255.255.0

wireless-channel 1
wireless-essid ######
wireless-mode ad-hoc

wireless-key ##########

  • iPadの設定
    iPadは設定からWifi接続で新たなネットワークにESSIDで設定したラズパイが見えるので接続すれば、VNCでラズパイが操作できるようになる。

OBDアダプタとRaspberryPiのBT接続

 このあたりは完全に素人なので色々とググりながらの作業。最初に躓いたのは、blueZがpipでインストールできない問題。BTを使うにはこれが必要って事なので色々やってみたけどどうしてもインストールできない。で、結局これは、今使ってるRaspbianのバージョン(Buster)だとBlueZはインストールしなくてもhcitoolとかbluetoothctl等が使える事が分かった…..。ここがわかるまでに結構時間がかかったよ。
 後は対話型CLIであるbluetoothctlを起動してscanすると、OBDIIが見つかった。

 これでOKかと思ったけど、ここからまたひと悶着あり。その2へと続くことに。

Read Full Post »