お知らせ

  • らずぱいでIoT

らずぱいでIoT 第7回(温度、気圧、湿度の計算準備)

noimage

らずぱいでIoT 第7回(温度、気圧、湿度の計算準備)

以前に、awkで計算した際に計算式で使用したdig_T1~dig_T3の算出を行いましたがBME280のチップ説明書によるとawkのプロラム内でdig_T2とdig_T3はsigned shortのためマイナスの0x8000の符号ビットが1の場合マイナスで扱う必要があるため正常な計算ができない可能性があります。 ただし、何度か読みだしたdig_T2,dig_T3はマイナスの値になることはなく常温程度ならマイナスにはならないのかもしれません。 awkではビット演算がサポートされてないためShift Rotateのような演算関数を作りそのうえでビット演算関数を作らない限り演算できないので実現は難しい(アセンブラにできて高級言語でできないことはあり得ないですが)のですが、pythonの場合は温度、気圧、湿度を計算するためのパラメータを求めるときにビット演算が可能なため肩を合わせることも可能になります。 上の表は各パラメータの算出を行うため、レジスタのどの位置を読むとどのパラメータになるかを示しています。前回のプログラムではcalib をDictにしたのはこのデータを読み出すためにはアドレスを指定して読みだしたほうがわかりやすいプログラムになるためです。 で今回追加した部分は以下のようになります。 ーーーーーーーーーーーーーーーーーーーーーーーー以下プログラム dig_T[1] = (calib[0x89] << 8 | calib[0x88]) dig_T[2] = (calib[0x8B] << 8 | calib[0x8A]) dig_T[3] = (calib[0x8D] << 8 | calib[0x8C]) dig_P[1] = (calib[0x8F] << 8 | calib[0x8E]) dig_P[2] = (calib[0x91] << 8 | calib[0x90]) dig_P[3] = (calib[0x93] << 8 | calib[0x92]) dig_P[4] = (calib[0x95] << 8 | calib[0x94]) dig_P[5] = (calib[0x97] << 8 | calib[0x96]) dig_P[6] = (calib[0x99] << 8 | calib[0x98]) dig_P[7] = (calib[0x9B] << 8 | calib[0x9A]) dig_P[8] = (calib[0x9D] << 8 | calib[0x9C]) dig_P[9] = (calib[0x9F] << 8 | calib[0x9E]) dig_H[1] = calib[0xA1] dig_H[2] = (calib[0xE2] << 8 | calib[0xE1]) dig_H[3] = (calib[0xE3]) dig_H[4] = (calib[0xE4] << 4 | calib[0xE5] & 0xf) dig_H[5] = (calib[0xE6] << 4 | calib[0xE5] >> 4) dig_H[6] = (calib[0xE7]) ーーーーーーーーーーーーーーーーーーーーーーーーここまで 前回は、dig_T,dig_P,dig_HはListで初期化していましたがプログラムを書く際これらもDictで初期化しておいたほうがわかりやすくかけるため初期化部分をDictにしている事に注意してください。 今回の全体ソースと日本語のチップ説明書をZIPにしてありますのでここからダウンロードしてください。    

  • パソコン関連

Amazon Lambdaが対応言語を拡張

noimage

Amazon Lambdaが対応言語を拡張

2018年11月29日に行われたAmazonのイベントre:Invent 2018でAmazon Lambdaが対応するプログラミング言語が拡張される旨が発表されました。 Amazon LambdaはAmazonの提供するサーバーレスのクラウドアプリケーション実行プラットフォームです。 コードを書けばサーバーレスでそれを実行することができ、アプリケーション作成者は実行環境を整える必要がないというものです。 ストレージサービスAmazon S3にファイルが追加されることや、NoSQLデータベースエンジンAmazon DynamoDB上のデータに変更が加えられた時など複数のトリガーでアプリケーションが実行されます。 開発者としてはサーバー環境を整えなくても良いというのは効率よく開発を始めることができ、Amazon Lambdaの仕様さえ分かっていれば書いたコードをアップロードすれば良いだけということになります。 現状ではNode.js、Java、Go、C#、Pythonを利用でき、今後これにC++、Rust、Elixir、Erlang、PHP、COBOLが新たに加えられることになります。 これにより既存のコードや、これらを利用できる開発者がLambdaのサービスを受けることができるようになり、Amazonのクラウドはより広い範囲のアプリケーションをサポートすることになります。 Amazonクラウドがカバーする範囲がどんどん拡大され、オンプレミスからクラウドへの移行もさらに進んでいくことになりそうです。

  • パソコン関連

iPad Pro2018を使っていて課題になる部分

noimage

iPad Pro2018を使っていて課題になる部分

iPad Pro2018を使っていて課題になる部分はいくつか挙げられます。 使う以前のお話ではありますが、高価であるということがあります。Smart Keyboard FolioとApple Pencilを合わせて購入すると、合計金額でMacBook Airが新品購入できる価格になります。 それだけの価値を見出すことは誰にでもできるというわけでは現状ないのかなと思うところです。それらは使っていての課題になってきます。 パソコンと同じだけの費用がかかりますが、パソコンの代わりになるものではありません。パソコンと比べようとする考え方自体がiPadのあり方とマッチしていないと感じます。 パソコンと比べるのであればWindowsの2in1タブレットPCを購入することが最適の答えであるように感じます。 iPad向けアプリについてはかなりの充実があり、パソコンとは全く別の価値観を与えてくれます。iPad向けのアプリを使いたいかどうかがiPadを選択するかどうかの分かれ目ではないかと思います、 ただ現状は新しいiPad Proに最適になっていないアプリも多いです。これは時間が解決することでしょうが、ユーザーとしては最ももどかしい部分です。 ファイルアプリでデータのやり取りができることは、よく母艦と呼ばれる親機的なパソコンとのやり取りの必要性が薄れ単体のコンピュータとして使いやすいとは思います。 クラウドの使い方についてはある程度研究が必要で、iCloudやDropboxに対する最低限の知識がないとファイルアプリを存分に活かしきれないのではないかとも思います。逆に言えばそれだけファイルアプリによってクラウド連携できるアプリは増えています。 iPad Pro2018に最適化されたアプリが増えるにつれて、今回獲得した拡張性を存分に活かせるポテンシャルはあります。 タブレット自体の需要が伸びない中で高付加価値という路線で来たiPad Proですが、まだまだ使う人を選ぶという部分は否めません。 現状開発されているiPad向けフルサイズのPhotoshopなどがリリースされることで価値が花開くのではないかという期待はありますが、いまのところ全ての力を発揮しているとは言い難く、現状でコストパフォーマンスに期待してはいけないと思うところです。

  • らずぱいでIoT

らずぱいでIoT 第6回(Pythonで初書き)

noimage

らずぱいでIoT 第6回(Pythonで初書き)

今回は、温度、気圧、湿度を読み出すためのパラメータを書込んで補正データとRawデータを読取る部分をpythonで書いてみました。 書込みパラメータは第4回のシェルスクリプトでRawデータを読むを参考にしてください。 ーーーーーーーーーーーーーーーーーーーー 以下プログラム #!/usr/bin/python import smbus import time SMBUS_NUMBER = 1 SMBUS_ADDR = 0x77 SMBUS_REG_CONF = 0xF5 SMBUS_REG_CTRL_MEAS = 0xF4 SMBUS_REG_CTRL_HUM = 0xF2 dig_T = [] dig_P = [] dig_H = [] calib = {} n = 0x88 while n <= 0xA1: ____ calib[n] = 0 ____ n = n + 1 n = 0xE1 while n <= 0xF0: ____ calib[n] = 0 ____ n = n + 1 n = 0xF7 while n <= 0xFE: ____ calib[n] = 0 ____ n = n + 1 bus = smbus.SMBus(SMBUS_NUMBER) bus.write_byte_data(SMBUS_ADDR,SMBUS_REG_CONF,0xA0) bus.write_byte_data(SMBUS_ADDR,SMBUS_REG_CTRL_HUM,0x01) bus.write_byte_data(SMBUS_ADDR,SMBUS_REG_CTRL_MEAS,0x25) time.sleep(0.1) for k in calib.keys(): ____ calib[k] = bus.read_byte_data(SMBUS_ADDR, k) for k,v in calib.items(): ____ print "0x%02X -> 0x%02X" % (k,v) ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ここまで このプログラムを書くにあたり、工夫した点はDictを使いレジスタアドレスとデータの関係性を作り上げている点にあります。 レジスタのアドレス等はデータシートに出ています。 こうすることによりレジスタの読取り部分をすっきりと書くことができたのではないかと思います。 ここではソース中のスペースを _ で表している事にご注意ください。 今回のソースはここからダウンロードできます。 何分Pythonは初書きのためつたないところがあるかもしれませんがご容赦ください。

  • らずぱいでIoT

らずぱいでIoT 番外編1(Windows10でsshが標準に!)

noimage

らずぱいでIoT 番外編1(Windows10でsshが標準に!)

なんと驚きました。 Winodws10のコマンドプロンプトからsshが標準で使えるようになってました。 ネタ元 http://www.atmarkit.co.jp/ait/articles/1811/22/news018.html sshだけではなく cURL や tar も使えるようになっているようです。 sshクライアント環境はほぼフルでそろっているようでsftpやssh-keygenも入っているようです。 これは、sshの公開鍵接続も可能になっているという事だと思われSSHを介してLinuxサーバー上にある様々な情報を得ることができます。 ちなみに、下記の画像はコマンドプロンプトからローカルサーバーに接続した例です。 これでCygwinのない環境でもsshがWindowsから使えるようになりました。 これを使うとラズパイにもすぐつながりますね!!

  • らずぱいで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; } ------------------------ ここまで でそれらしい値が表示されています。 なので今回使っている温度・湿度・気圧センサーは、シェルスクリプトからでも制御可能なデバイスです。 以上のスクリプトとサンプルデータはこちらからダウンロードできます。

  • ブログ

和歌山Pythonの会 発足秘話

和歌山Pythonの会 発足秘話

和歌山Pythonの会 こんばんは、落合です。   僕は、現在駆け出しのエンジニアなんですが、 和歌山県に住んでいてずっと感じていたことがあります。 「和歌山でITの勉強会って無いよなぁ」 というのも、世の中こんなに AI だ IoT だと叫ばれ、挙句に 学校でプログラミング教育実施 とまで言われているのに、なぜここ和歌山では、プログラミングが学べる・議論できる・共有できる場が無い(正確にはあまり無い)のかと。 エンジニア不足が問題となっている現代で、もっと仲間を増やそうと考える人がいてもいいんじゃないのかと。 エンジニアとして活動する中で困っていることや悩んでいることを共有・解決してあげたいと思う人がいてもいいんじゃないのかと。 ・・・ よし!無いなら作っちゃえ!! という軽いノリと勢いで「和歌山Pythonの会」が発足されました。(今日現在参加者14名) 正直に言いますと、僕自身Pythonマスターではありませんので、他人の困っていることはすぐには解決できないでしょう。 でも、場を作ることによって、仲間がいる安心感や やらなきゃいけないという責任感は芽生えましたので、とりあえずは成功です。 また、昨今のAIブームに押されてか、これから「Python」を学ぼうという方も予想以上にいたことは喜ばしいことです。 和歌山Pythonもくもく会 少ししかありませんが、実績報告を。 第1回和歌山Pythonもくもく会 日時:10月20日(土)14:00〜17:00 場所:TーLABO   参加者:6名 成果物(僕の):Djangoフレームワークで書籍管理アプリを作成しました。 https://wakayama-python.connpass.com/event/103168/   第2回和歌山Pythonもくもく会 日時:11月17日(土)13:00〜17:00 場所:システムキューブ  参加者:12名 成果物(僕の):初学者の方と文法事項(文字列・データ構造)を学びました。 大学生が2名参加してくれました!レベル高い!将来有望! https://wakayama-python.connpass.com/event/105745/ 【告知】第3回和歌山Pythonもくもく会(開催予定) 日時:12月15日(土)13:00〜17:00 場所:システムキューブ https://wakayama-python.connpass.com/event/110246/   昨日公開したにも関わらず、既に4名の方が申し込んでくださっています。 今回からは初心者コースも設けました。(こちらは「もくもく」というより「わいわい」です) 環境構築から、’Hello,World’、データ型、テータ構造、正規表現あたりができればと思います。 皆様、ふるってご参加ください。 新年、第4回あたりは「ラズパイ部隊」も本格的になっているのではないかと期待しております。 今回はここまで。 ありがとうございました。

  • らずぱいで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はデバイス番号です。  

  • パソコン関連

iPad Pro 2018を10日使ってみて

noimage

iPad Pro 2018を10日使ってみて

iPad Pro(2018)を11インチを使ってみて思うところは、これまでのiPadの様々なパソコン寄りの機能をそつなくこなすようになった機器だと感じます。 Smart Keyboard Folioを常に装着して使っていますが、Folioという名前のままに書籍のように両面からカバーされているので持ち心地や外観などはSmart Keyboard Coverよりも落ち着いているように感じます。 マグネットでの固定も十分に強力でグラグラしているということはありません。打鍵感としてはもともとそのようなものとして割り切れば良いものと考えているので特別な不満はありません。 おおよそMacBookでできていたことはiPad Proでも可能で利用方法としても同じように使えるので、Smart Keryboardを利用し、さらに小型になったノートパソコンと同様に使うことはできています。 Face IDによるロック解除については今のところもっとも慣れていない部分です。 Smart Keyboardでスタンド状態で操作する場合は目の前に広げた時点で自動的にロック解除されるのは自然で大変使い心地が良いです。 ただタブレットとして特に暗所で手持ちする場合などは、同じようにスムーズにロック解除されるというのは難しいとも感じます。この部分は慣れに依存する感想と感じます。 iPhone Xシリーズのように画面を注視していれば画面の輝度が下がったりはしないのですが、ちょっと目を離しているとすぐに画面の輝度が下がりロック状態になってしまうことについても、慣れないところです。 この辺りはモバイル機器と、パソコン寄りの機能を持つタブレットという二つの面をどううまくユーザーが使い分けていくのかということになりそうです。 タブレットとして使うのか小型PCとしてつかうのか、ユーザーとして選択肢が増えたのは事実です。どちらを選ぶかは所有者の考え方次第です。 現状どちらも魅力的な選択肢なのですが、どちらがより自分にフィットしているのかはこれから探っていかないといけないかと思うところです。 今後購入を予定されている方は、様々なメディアでの情報を入手して自分の考えにフィットするものなのかを検討すると良さそうです。  

  • らずぱいで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にセンサーもジュールが配置されていることが確認できました。  

1 12 13 14 15 16 72