お知らせ

  • らずぱいでIoT

らずぱいでIoT 第5回(awkで計算してみる)

noimage

らずぱいでIoT 第5回(awkで計算してみる)

前回は、i2c-toolsのコマンドを使い気圧、温度、湿度のRawデータを読取ってみました。 今回は、Rawデータと補正値を読取ってそれをファイルに取り古くからあるフィルタープログラムのawkで連想配列を駆使して温度計算をしてみようと思います。 --------------------- 以下 ReadTemp シェルスクリプト側 #!/bin/bash i2cset -y 1 0x77 0xF5 0xA0 b i2cset -y 1 0x77 0xF2 0x01 b i2cset -y 1 0x77 0xF4 0x25 b sleep 0.1 i2cdump -y -r 0x88-0xA1 1 0x77 b >RT.dat i2cdump -y -r 0xE1-0xFE 1 0x77 b >>RT.dat awk -f CalcT.awk RT.dat ------------------------ ここまで 最後に awk -f でawkスクリプトを読んでいます。 ------------------------ 以下 awk スクリプト BEGIN { for(i=0; i<=15; i++) { hex[sprintf("%X",i)]=i; if (i>9) hex[sprintf("%x",i)]=i; } } /^[89aef]0:/ { split($0,dat,":"); line[dat[1]]=dat[2]; } END { dig_T1=shiftL(getByte(toHex("8"),toHex("9")),8) dig_T1+=getByte(toHex("8"),toHex("8")); dig_T2=shiftL(getByte(toHex("8"),toHex("B")),8) dig_T2+=getByte(toHex("8"),toHex("A")); dig_T3=shiftL(getByte(toHex("8"),toHex("D")),8) dig_T3+=getByte(toHex("8"),toHex("C")); temp_r = shiftL(getByte(toHex("F"),toHex("A")),12); temp_r += shiftL(getByte(toHex("F"),toHex("B")),4); var1 = shiftR(temp_r, 3) - shiftL(dig_T1,1); var1 *= shiftR(dig_T2,11); var2 = shiftR(temp_r, 4) - dig_T1; var2 *= shiftR(shiftR(temp_r,4)-dig_T1,12); var2 *= shiftR(dig_T3,14); printf("Temperature = %2.2f\n",shiftR((var1+var2)*5+128,8)/100); } function getByte(hiA,lwA) { r=0; Ads=sprintf("%x0",hiA); r = toHex(substr(line[Ads],3*(lwA+1)-1,1))*16+toHex(substr(line[Ads],3*(lwA+1),1)); return r; } function shiftR(v,r) { return int(v/(2^r)); } function shiftL(v,r) { return int(v*(2^r)); } function toHex(c) { if (length(c)==1 && (c ~ /[0123456789ABCDEFabcdef]/)) return hex[c]; else return -1; } ------------------------ ここまで でそれらしい値が表示されています。 なので今回使っている温度・湿度・気圧センサーは、シェルスクリプトからでも制御可能なデバイスです。 以上のスクリプトとサンプルデータはこちらからダウンロードできます。

  • らずぱいでIoT

らずぱいでIoT 第4回(シェルスクリプトでRawデータを読む)

noimage

らずぱいでIoT 第4回(シェルスクリプトでRawデータを読む)

今回はi2c-toolのi2cset コマンドと i2cdumpコマンドで気圧、温度、湿度のRawデータを読取ってみます。 写真の画面中に使用したシェルスクリプト(ReadTemp)の内容と実行結果がはいいています。 間隔を置いて2度実行しており、最初の3Byteが気圧、次の3Byteが温度、最後の2Byteが湿度を示すRawデータです。 軽くシェルスクリプトの内容について説明しますと i2cset -y 1 0x77 0xF5 0xA0 b はノーマルモード時にサンプリング間隔を示すスタンバイタイムと気圧と温度の下4Bit値が0になるように設定しています。 i2cset -y 1 0x77 0xF2 0x01 b は湿度のオーバーサンプリングを1回に設定 i2cset -y 1 0x77 0xF4 0x25 b は圧力、温度のオーバーサンプリングを1回に設定しモードをForcedモードに移行しサンプリングを行います。 その後100msの時間をおいて、 i2cdump -y -r 0xF7-0xFE 1 0x77 b で各レジスタ値を読取っています。 ただし、0x77はセンサーのアドレス、1はデバイス番号です。  

  • らずぱいでIoT

らずぱいでIoT 第3回(配線と接続確認)

noimage

らずぱいでIoT 第3回(配線と接続確認)

今回は、いよいよRaspberryPIとセンサーの結線と動作確認を行います。 ここからは、AE-BME280というセンサーモジュールのデータシートを見ながら作業を行います。 以下のURLでデータシート(秋月電子様のサイト)は入手できます。 http://akizukidenshi.com/download/ds/akizuki/AE-BME280_manu_v1.1.pdf 実際の結線をデータシートの内容と照らし合わせながら解説しますと ます左側にある「I2Cの接続方法」でI2Cで動作させるためにはJ3というジャンパをはんだ付けしてモジュールがI2C通信を行うように設定します。 右側の図は実際の結線で上側がセンサーもジュール、下側がRaspberryPIのGPIO端子で注意すべき点はセンサー側の5番ピンを3V電源(GPIO1番ピン)につなぐかGND(GPIO9番ピン)でセンサーのアドレスが変ります。 ※補足 GPIOピンには電源として+5Vと+3Vが供給されていますAE-BME280の場合1.71V~3.6V動作と書かれていますので+3Vの1番ピンを使います。 ここではデフォルトでは0x76で面白くないので+電源につないで0x77に変えてみます。 ※補足 GPIOピンの見方ですがRaspberryPI本体の基盤パターを見るとGPIOピンの1番ピンが〇ではなく□になっていることで判断できます。 実際につないでみた写真が以下です。 でこの結線があっているかを確認してRaspberryPIを起動します。 rootユーザーになり前回インストールしたi2c-toolsのコマンドで配線道理のアドレスにセンサーがあることを確認してみます。コマンドはi2cdetectというコマンドを実行委ます。オプションの -y 1 の1はI2Cデバイスの番号1を指定して、-yは対話モードを禁止しています。 0x77にセンサーもジュールが配置されていることが確認できました。  

  • らずぱいでIoT

らずぱいでIoT 第2回(ユーザ環境とI2C-tools)

noimage

らずぱいでIoT 第2回(ユーザ環境とI2C-tools)

第2回はRaspbian Linuxのユーザー環境について書いておきたいと思います。 初回ログインしたユーザーpiは初期パスワードがraspberryという風に誰もが知っているパスワードでさらにsudoでパスワードを聴かれることのない設定になっています。 この状態でインターネットに接続しIoTデバイスとして公開してしまうと危険極まりない状態で公開してしまいますので必ずユーザー pi のパスワードを変えるかこのユーザー自体をロックしておく必要があります。 ユーザロックはrootユーザーで passwd -l pi とするとロックできます。 またロックを解除する場合は passwd -u pi で解除可能です。 ちなみに新しいユーザーを登録する場合は adduser [ユーザー名] で追加することが可能です。 起動直後はrootユーザーになる手段は pi ユーザーで sudo を実行するしかありませんのでこの時にrootユーザーパスワードを変えておくか、ユーザー piを有効にしておく必要があります。 次に、Raspbian Linuxで i2c 通信を有効にします。 i2c通信が有効になると /dev/i2c-1 というデバイスファイルが出来上がります。 rootで raspi-config を起動します。 メニューから  Interfacing Options ⇒ I2C を選ぶとI2Cを有効にするかを聞いてきますので<はい>を選びます。 あとは<確認>でEnterを押しraspi-config メニューを終了し reboot コマンドで再起動します。 再起動した後 ls -l /dev/i2c-1 で表示されることを確認できます。 次に i2c-toolsというパッケージをインストールすることでシェルスクリプトからデバイスの操作が可能になります。 インストール方法は次の通り apt-get install i2c-tools でインストールできます。 以上で、I2C通信に必要なツールまでインストールできました。  

  • らずぱいでIoT

らずぱいでIoT 初投稿(Raspbian起動編)

noimage

らずぱいでIoT 初投稿(Raspbian起動編)

かわせです。 RaspberryPIとIchigoJamを使って温度・湿度・気圧センサーを接続してプログラムを作っていく過程を投稿しようと思います。 RasberryPIではOSがRaspbian(Debian)Linuxを使ってシェル・python・C言語を使いIchogoJamではBasicでプログラミングしてみたいと考えています。 マイコンとセンサーはSPIとI2Cと呼ばれるシリアル通信で接続されるものが多いようで中でもI2C通信について触れていきたいと思います。 で!初回の今回はRasberryPIを使える状態にするのが先決なのでセットアップと電源の入り切りについてPDFにまとめてみたのでダウンロードしてみてください RasberryPI準備編 尚この投稿で使うハードウエアはIchigojamとRaspberryPI Zero WHを使います。 あとLinuxの使い方の話もツラツラと書いていきます。

1 2