「kintone Café 福岡 Vol.3」が開催されました

 先日、kintone等サイボウズプロダクトの開発者コミュニティサイト「cybozu.com developer network」が開設半年で遂に登録メンバー数1,000ID超えを達成し、全国での「kintone Café」開催も16件、参加者数が延べ250人に達したとのニュースがサイボウズさんからプレスリリースされていました(「kintone Café 福岡 Vol.1」の様子も掲載頂いていました)。

 

「cybozu.com developer network」登録メンバー数の推移

(「cybozu.com developer network」登録メンバー数の推移:サイボウズプレスリリースより)

 

 そんな発表の翌日10/24(金)、福岡では「kintone Café 福岡 Vol.3」が開催されました。前回7/11のVol.2から約3ヶ月振りの開催となりました。

 今回も関係者含めて20名ほどのご参加を頂きました。事前情報からエンジニアの方が半数程度と想定していましたが、会場での挙手によると1/3くらいだったと思います(みなさん、遠慮されたのかと)。また、これからkintoneを活用/提供したいという、どちらかというとビギナーよりの方が多い印象でした。ご参加頂きました皆様、ありがとうございました。

 

f:id:yamaryu0508:20141026011315j:plain

 (今回は、勉強会の利用も多いコワーキングサロンOnRAMPでの開催)

 

 今回は、前回に続き本家サイボウズさんの協賛に加え、東京のkintoneエバンジェリスト四宮さんジョイゾー)、福岡のエバンジェリストである久米さんAISIC)と山下が参加し、kintone RubyGemsの作者である川上さんニシム電子工業)にもLTでお話頂き、バラエティーに富んだ内容となりました。

 

【今回のメニュー】

  • kintoneとは?サイボウズクラウド事業への取り組み(サイボウズ 佐藤さま)

  • こんな案件でkintone導入してきました!(AISIC 久米さま)

  • 完全定額!kintoneだからできる新しいSIビジネス(ジョイゾー 四宮さま)

  • kintone JavaScriptカスタマイズハンズオン(山下)

  • RubyREST APIクライアントの紹介(ニシム電子工業 川上さま)

   ※イベントページ → http://kintone-cafe.doorkeeper.jp/events/15820

 

 山下から簡単にご挨拶させて頂いた後に、kintone Café最多出席を誇るサイボウズ佐藤さんの安定のイントロパートでスタートです。

 

f:id:yamaryu0508:20141026011815j:plain

 

 「kintone Café 松山」と同様に、サイボウズプロダクトの簡単な説明に続けて、kintoneの基本機能である

  • データベース
  • ワールフロー
  • コミュニケーション

によって実現される「PDCAフレームワーク」についてのお話に、kintoneがフィットする/している市場、活用ニーズの高いアプリ群についてご紹介頂きました。

 

 続く2番手として、8月からkintoneエバンジェリストになられたAISICの久米さんの登場です。「こんな案件でkintone導入してきました!」ということで、「体操教室」、「物流」、「不動産」等適用分野も多岐に渡っていましたが、MindMeisterでkintoneの導入事例を「導入前の課題」と「導入後の改善効果」を示しながら分かりやすく解説頂きました。挙げられたkintone活用ポイント(事例を通しての共通点)は、

  1. 拠点や人が分散する状況下で、なかなか統一化が出来ないフォーマット、同時入力も難しく、つまり業務形態・共有に向かないExcelからの脱却
  2. 共有しながらも、必要に応じて適切なアクセス権限管理
  3. モバイルと写真等の添付ファイルによる高速な情報共有
  4. 紙情報の電子化
  5. 要件定義不要・ユーザーと対面で話しながらのアプリ作り
  6. kintoneという枠組み(ある一定の条件とトレードオフ)を生かした提案

という感じだったと思います。締めのスライドで「こんな会社にkintoneは刺さる!」と表現されていた項目に幾つか補足されていた点を私が覚えている範囲で追記させて頂きました。

 「IT自立支援」を掲げられている久米さんですが、ユーザーさんの声を聞き、一緒に業務設計やアプリ作成を進め、ユーザーさんのITへの敷居を下げ容易に活用できるように、というような久米さんの思いに触れさせてもらえるような、非常に共感できるポイントばかりで、頷きながら聞かせて頂けた内容でした。また、現在進行中の案件も幾つかあられるそうで、今後の展開が楽しみです。

 

f:id:yamaryu0508:20141026013929j:plain

 

 次に3番手、kintoneエバンジェリストの中でアウェイのkintone Caféへの出席率No.1を誇るジョイゾーの四宮さんへバトンタッチです。

 実際のkintoneの画面(データはデモ用)による事例紹介では太陽光インテグレータの「カナディアンソーラージャパン」さんとゲームで有名な「ワンオブゼム」さんの2件をご紹介くださいました。前者では申請書類のフォーマットであるExcelとの連携、後者では折れ線とガントチャートによる事業管理とkintoneのカスタマイズ機能を活用した「業務プロセスのファストなシステム化」の好事例だったと思います。

 更に内容は完全定額!kintoneだからできる新しいSIビジネス」というタイトルの核心に迫り、納品のない受託開発」、「システム・インテグレーション崩壊等、最近のSI・受託に関するトピックに触れつつ、ご自身の視点・実践のポイント(ノウハウ)として、

  • 「人月単価」から「技術力・ノウハウ重視」へ(納期をかけなくても認めてもらえる価値のあるシステムの提供)
  • 対象部門が「情シス部門」から「業務部門」へ(クラウドなのでサーバ不要)
  • ウォーターフォール」から「アジャイル」へ
  • 「ボリューム満載なドキュメント納品」から「ドキュメントのオプション化」へ

を挙げられ、kintoneを活用した「来店型」で「39万円ポッキリ」の中小企業向けの定額業務システム開発サービスシステム39コンセプトムービーBCNセミナー 等最近の取り組みをお話し頂きました。より詳しいお話は「cybozu.com conference 2014(東京・大阪)」でお聞きできると思いますので、kintoneやSIビジネスの潮流に興味をお持ちの方は、足を運ばれてはいかがでしょうか。

 

 ここまでは割とkintoneを活用したビジネスといったトピックでしたが、ここから技術よりのトピックに移っていきました。

 

 まずは、「kintone RubyGems」の作者であるニシム電子工業の川上さんです。

 kintoneのRubyREST APIクライアントである「kintone RubyGems」について、現状の対応状況とこれからの開発展望についてお話頂きました。kintone公式SDKとしてJavaiOS、Goがあり、有志サードパーティSDKRuby、.NET、Rと幾つかありますが、アップデート・メンテナンス頻度の高さRubyならではのコンパクトさを PRされていました。kintone Café 松江(動画)でサイボウズの浅賀さんもRaspberry Piからのkintoneへのアクセスに利用され「わずか4行でkintoneにアクセスできる」と紹介されていました。

 また、目玉機能としてRubyでクエリが記述できる「Query Helper」の紹介がありました。便利そうな機能だなぁと思っていたら、後ろから久米さんの「あつい」という心の声が漏れてきたような囁きが聞こえてきました。最後に、現状の課題としても挙げられていましたが、ファイルAPIの実装を含め今後更に便利な関数群が実装されることを期待したいと思います。

 

f:id:yamaryu0508:20141026030230j:plain

 

 最後に山下ですが、今回こそはハンズオンをと思っていましたが、やはり時間が足りずデモまでとなってしまいました。ハンズオンのためにPCをお持ち頂いた方、申し訳ございませんでした。お詫びと言ってはなんですが、当日お話できなかった分スライドも追記して、サンプルアプリ(GitHub)も公開させて頂きましたので、ご覧頂ければと思います。

 

 

 山下からはJavaScriptカスタマイズの例として、「kintone Café 松山」の延長でもある「kintone.proxy()を活用したkintoneによるサーバレスマッシュアップのコツ」のようなものをご紹介しました。kintoneのカスタマイズ用JavaScriptから外部サービスに向けたAPI連携を可能としているkintone.proxy()という仕組みを利用しています。通常クロスドメインを許さないJavaScriptからREST APIを叩けるという、フィットすれば本来サーバーが必要になるような開発がサーバーレスで出来てしまう優れ機能の活用例でもあります。

 今回のCaféでは、なんだかんだで問い合わせも多いメール送信のサンプルをSendGridのAPIで実現する例をご紹介しました。GaroonやサイボウズOfficeにある電話メモをkintoneでもというシナリオです。kintoneであれば、APIを使い分けてメール・音声メッセージ・SMS等メディアを選択できるような「"拡張"電話メモ」アプリなんかもいいかもしれません(無駄に不要な機能を追加する必要はありませんので、必要に応じて)。

 

 

 今回も内容盛り沢山の長丁場となりましたが、前回と参加者の顔ぶれも少し変わったりと、福岡でのkintoneのコミュニティも広がりつつあるのかなぁと感じました。また、今回は懇親会にも多数ご参加頂き、夕方のCaféの話の続き等kintone談義は絶えることなく、夜の部でも親交を深めることができました。

 

f:id:yamaryu0508:20141027124324j:plain

 

 最後に、次回もまた更にkintoneやCaféに興味を持って頂ける方が増えることを願いながら、益々進化し続けるを、福岡・九州からも皆で盛り上げていきたいと思っていますので、今後ともよろしくお願い致します!

 


今回のカフェスイーツ

 今回は、サイボウズさんより東京スカイツリークリスピーショコラをご提供頂きました。

f:id:yamaryu0508:20141027124102j:plain

 

ありがとうございました。

 

kViewerのカスタマイズ例 其の弐(TimelineJS)

 さて、今回も前回に引き続き、「kViewer」のカスタマイズ例をご紹介したいと思います。今回は、ダイナミックなタイムライン(年表)表示を可能にするJavaScriptライブラリ「TimelineJS」を用いたカスタマイズ例です。対応するkintoneアプリもこちらに公開させてもらっています。

 

 早速、出来上がりイメージです。

f:id:yamaryu0508:20141013182939p:plain

(実際の公開ページはこちら

 

 TimelineJS公式ページや(私の)kintoneアプリのGitHubページにありますが、タイムラインに取込めるメディアは、YouTubeVineFlickrPicasa等バリエーション豊かですので、豪華に作り込むことが出来ます。今回のサンプルコードもGitHubに公開させてもらっていますが、こちらにも貼付けておきます。

 

JavaScript

 

 今回のポイントは、・・・基本的に前回と同様です。ただ、TimelineJSのライブラリがHTTPS環境でホストされているCDN情報はなかなか稀少で、kintoneアプリでもそうですが、HTTPS通信しか許可されていないページの作り込みの際には役に立つので、参考にして頂ければと思います(一応公式ヘルプに問合せて入手した情報ですが、少し遅いような気がしています)。

 

 前回に比べると、kintoneやkViewerをCMSライクに使う方法として、より分かりやすく実践的な事例だったのではないかと思います。kViewerで同様の用途を検討中の方の参考になれば幸いです(サンプルのご利用に際しては自己責任でお願い致します)。

kViewerのカスタマイズ例(Google Map)

 会社の隣の人には意外にも不評なこのブログですが、最近はRaspberry Pi関連のトピックへのアクセスが多いようで、嬉しい限りです。ご覧頂いている皆さま、ありがとうございます。

 

 さて、今回はサイボウズスタートアップスさんからリリースされているkintone連携サービス「kViewer」のカスタマイズ例をご紹介したいと思います。

 kViewerは、kintoneのデータやグラフを外部に公開できるサービスです。 kintoneと同じように30日間の無料トライアルも可能です。

(公式サイトより)

 

 完全公開から、アクセス制限(パスワード認証、IPアドレス)、公開期間等の設定に加え、kintoneと同じようにJavaScriptCSSの埋め込みによるカスタマイズまでできるようになっています。ですので、CMS、掲示板的な使い方が向いているように感じますが、見た目等は自在に作り込むことが出来ます。

 今回は、kintoneのサンプルにある「顧客訪問リストを地図にピン表示する」でも使われているGoogle Maps APIを用いたkViewerカスタマイズをご紹介したいと思います。データとしては、kintoneの勉強会「kintone Café」開催情報を利用し、地図上の開催地にピンを立てていきたいと思います。対応するkintoneアプリもこちらに公開させてもらっています。

 

 まずは出来上がりイメージです。

 

【Before:従来のkViewerの画面】

f:id:yamaryu0508:20140929010548p:plain

 従来のkViewerの画面は、kintoneの通常の画面に似たようなものですね。 

 

【After:JavaScriptCSSによるカスタマイズ】

f:id:yamaryu0508:20141009080732p:plain

(実際の公開ページはこちら

 

 やはり、地図が入ると豪華に見えますね。今回はピンをクリックするとバルーンが出るオマケをつけています。早速ですが、サンプルコードは次の通りです(GitHubで公開中)。

 

JavaScript

 

CSS

 

 JavaScriptもベタに書くことになりますが、kintoneでJavaScriptカスタマイズをやったことがある方は、同じ要領でカスタマイズできると思います。kViewerならではのポイントを挙げるとすれば、ページやライブラリの読み込みを待つ処理を入れる必要があるところだと思います。window.addEventListener("DOMContentLoaded", function() {から数行ですね。また、サンプルではよく使うjQueryを取込んでいますが、今回は使っていません。

 ちなみに手こずったのは、データバインドです。kViewerでは現状kintoneのようにデータバインドする関数・APIがありませんので、表から取り出すことにしました。ここでクロスブラウザinnerTexttextContent)に紐つく問題の顕在化です。getElementText()で項目名前後の改行と空白を取り除くようにして解決しています。

 

 最後に、kViewerはホームページへ埋め込むためのiframeタグのコードを発行してくれます。このブログの横幅の制約上、ちょっと苦しい配置ですが実際に張り込んでみました。

 

 ちょっと長くなりましたが、kViewerでのページカスタマイズを考えられている方の参考になれば幸いです(サンプルのご利用に際しては自己責任でお願い致します)。

「kintone Café 松山 #1」に参加してきました

 今月は「kintone Café」ラッシュとなっていますが、昨日9月22日、サイボウズ創業の地である松山での初開催となったkintone Café 松山 #1に参加させて頂きました。

f:id:yamaryu0508:20140922195113j:plain

サイボウズ松山オフィスはオシャレで落ち着けるたたずまいです)

 

 今回は、株式会社アイムービックさんの主催で、場所はサイボウズ松山オフィスでの開催でした(アイムービックさんの開催レポートも公開されましたので、是非ご覧ください)。松山では初回からいきなり約20名の参加者が集いました。流石地元です。

f:id:yamaryu0508:20140923013037j:plain

 

  「kinotne Caféの理念」についての簡単な説明の後、いつも通り?サイボウズ佐藤さんのイントロパートでスタートしていきました。基本に忠実にkintoneの基本機能である

  • データベース
  • ワールフロー
  • コミュニケーション

によって実現される「PDCAフレームワーク」についてのお話に、kintoneがフィットする/している市場、活用ニーズの高いアプリ群についてご紹介頂きました。なんでも、一位のニーズはSFCと同じく案件管理で以降の傾向もほぼ同じ、それでいながらSFCからの乗換も多いとか。

f:id:yamaryu0508:20140923013433j:plain

 

 続いて、kintoneエバンジェリストである「kintone Café 土佐 Vol.1主催」タイムコンシェル片岡さんと「道後温泉旅行中」の山下もお話しさせて頂きました。私はイベントページから普通に申し込んで、聴衆の皆さんに紛れ込むつもりだったのですが・・・。

 山下からはkintoneの基礎ハンズオンの前にも関わらず、「kintoneカスタマイズのコツ」とタイトルもやや大げさに、割と技術的に突っ込んだkintoneのJavaScriptカスタマイズの可能性について深めることを試みました。

 

今回のデモアプリの一部をアプリテンプレートやサンプルコードを含めてGitHubに公開させて頂いていますので、ご覧頂ければと思います。

(追記)「kintone Café 福岡 Vol.3」にてSendGrid APIによる電話メモアプリ(メール送信アプリ)のサンプルを紹介させて頂きましたので、スライドと合わせて参照頂ければと思います。

 

 また、片岡さんからはタイムコンシェルさんでkintoneを取り扱うようになった経緯から現在の取り組みについてのお話がありました。およそ2年前のkintoneに出会った頃にはkintoneへの注力について半信半疑だったそうですが、昨年7月のJavaScriptカスタマイズ機能のリリース等を受け、案件をこなされる中でkintoneを事業の主軸にしていくことになったとのことでした。エンジニア視点からkintoneの機能構成はまさに秀逸であり、ユーザーライクなUI/UXから高度なカスタマイズ機能までを具備していることからお客さまの目の前でのアプリ作り/修正をできることが大きな強みであると仰っていました。

 タイムコンシェルさんはkintoneアプリストアにもアプリを公開されていますので、そちらも参考にして頂ければと思います。

 

 そして、kintoneと言えば実際に触れてみることで、そのメリット・ファスト感を体感できるということで、kintone Caféではお馴染みのハンズオンのパートに移っていきました。今回のメンターであるサイボウズの西尾さんからは、Excelファイルを用いたアプリ作成からスタートし、フィールドやルックアップ等の設定を含めたkintoneでのアプリ作りの基本が紹介されました。

f:id:yamaryu0508:20140923032923j:plain

 

 最後に、kintone開発プロダクトマネージャであるサイボウズの門屋さんから「kintoneが変えるSIビジネス」というテーマでのお話でした。「今回、挑戦的内容を含みます」と前置きされた上で、

  • 最近話題の人月のSIビジネス問題

  • これから訪れるICT特需によるSIerへの要求

  • クラウドは従来型のSIerにとって敵か否か

  • クラウド利用時にベンダーに突きつけられる要件

といったトピック・命題を取り上げられつつ、ご自身の見解を展開されました。詳しくはスライドが公開されましたので、こちらをご覧ください。

 

先日のBCNセミナーと共通するような見解・予見だったと思いますが、クラウド・エコシステムがもたらすであろう革新・可能性を感じさせてもらえるお話でした。この種の議論は今年の「cybozu.com conference 2014」でも大きなテーマとなってくるのは間違いなく、パイオニア達の動きからも目が離せないところです。

 

 今回、このような内容で「kintone Café 松山 #1」も盛会のうちに終了しました。そして、Caféのあとは出口で金色のボウズマンに見送られ、恒例の懇親会で・・・

f:id:yamaryu0508:20140923035423j:plain

皆さん交流を広げられていたようでした(^^)

 


おまけ

 松山と言えば「道後温泉」です(個人的には元々こちらが目的)。今朝10時頃に道後温泉本館に足を運び、懇親会で教えて頂いた通り「坊ちゃん団子」も食せる個室コースで入湯してきました。「霊の湯(たまのゆ)」、「神の湯(かみのゆ)」と2種類の温泉につかった後は、「坊ちゃんの間」の向かいの五号室でゆったりとした時を過ごさせてもらいました。

f:id:yamaryu0508:20140923222716j:plain

坊ちゃん団子を食してゆっくりした後は、皇室専用の湯殿「又新殿」の見学に案内されます。2億円にもなる高級な石で出来た風呂には、浴衣姿のまま立って入られていたとのことでした。また、ご利用は大正天皇昭和天皇による合計3回で、現在では温泉を閉じてしまい利用されることはなくなったとのことでした。

 次は今回改装中だった「トンカツパフェ」も頂きに、また来させてもらいたいと思います。

kintoneで学ぶREST APIのリクエスト方法(テスト/デバグ用)

 今回は「REST API」のリクエスト方法について、APIのテストやデバグで活用出来るように、サイボウズkintoneを題材に自分の備忘録的な情報をまとめておきたいと思います。

 kintoneを題材にしているのは、「REST API」、「JSON形式」といったトレンドの設計にのっかていること、ファイルのアップロード/ダウンロードを扱っていることから、網羅的に整理出来ることが大きいです。「kintone REST API」が扱えれば他のWebサービスのリクエストも扱えるという考えです。

 ※「kintone REST API」の公式リファレンスはこちらです

 

curlコマンド】

 まずはcurlコマンドです。メソッドを一通り網羅することを目的とすることから、次のリクエスト例はkintone REST APIの一部になりますので、ご了承ください。

 なお{subdomain}{apiToken}{authToken}は、各自置き換えてください。認証については、要件に応じてX-Cybozu-AuthorizationX-Cybozu-API-Tokenを使い分けてください。

 

  • GET/record(ボディ利用)「レコード取得」公式リファレンス
  • curl -X GET "https://{subdomain}.cybozu.com/k/v1/record.json" \
    -H "X-Cybozu-API-Token: {apiToken}" \
    -H "Content-Type:application/json" \
    -d "{"app": 610,"id": 1340}"
  • POST/record 「レコード登録」公式リファレンス
  • curl -X POST "https://{subdomain}.cybozu.com/k/v1/record.json" \
    -H "X-Cybozu-API-Token: {apiToken}" \
    -H "Content-Type:application/json" \
    -d "{"app": 610,"record": {"tempC":{"value":210}}}"

 

 しれっと書き並べましたが、・・・少し考察しましょう。

  送信するデータ形式について、通常-dがついた時にはフォーム形式のデータを送信するのですが、JSON形式にも対応しています。フォーム形式の場合には、データを{key}={value}の形式で記述することになり、Content-Type:application/x-www-form-urlencodedがヘッダとして自動付加されます。一方JSON形式の場合には、上記の通りデータは文字列での記載となり、Content-Type:application/jsonをヘッダで指定する必要があります。

 また、ファイルをデータ送信する際には-dに代わって-Fを利用します。対応するMIMEタイプはContent-Type:multipart/form-dataですが、明示は不要(自動付加)のようです。

 更に、curlコマンドの特徴の一つは、GETやDELETEのメソッドでボディを送信出来ることではないでしょうか。開発言語やライブラリ次第かと思いますが、これが出来ないものは結構多いです。後述のPOSTMANでも唯一これはできないといったような機能です。ここで合わせて注意しておきたいのは、kintoneのGETメソッドではオプションパラメータをURIクエリもしくはボディで指定する方法がありますが、ボディ利用時にはJSONで記述されることを明示するためContent-Type:application/jsonをヘッダで指定する必要がある一方で、クエリ利用時にはMIMEタイプの指定は不要(エラー)になる点です。

 

 ちなみに、コマンドラインでkintoneを使い倒すためには「kintone-ci」が公開されていますので、こちらをご利用ください。

 

【POSTMAN(ブラウザHTTPクライアント)】

 次にchrome extentionで提供されるHTTPクライアント、POSTMANです。POSTMANは、JSON形式からファイルの取扱いまで、あらゆるAPIの試験が可能で、コレクションとして個々のリクエストを保存出来ますので、非常に便利です。出来ないことがあるとすれば、唯一GETやDELETEのメソッドでボディが送信出来ないくらいです。

 kintoneの基本的なAPIリクエストのコレクションはこちら文字コードUTF−8)で共有させて頂いていますので、参考にして頂ければと思います。

 なお、ここでは記述方法とリクエストの中身を見る方法に重きを置きます。

 

  • まずは、記載方法とリクエスト方法です

f:id:yamaryu0508:20140916015559j:plain

  • 次にデバグに役立つリクエストの中身を見る方法です

f:id:yamaryu0508:20140916015737j:plain

  • リクエストの中身が展開されると次のようになります

f:id:yamaryu0508:20140916015746j:plain

 

  展開されたリクエストの中身を拡大してみましょう。

 f:id:yamaryu0508:20140916203209j:plain

当然のことですが、リクエスト内容が露わになっていることが確認出来ます。

 

 HTTP/REST API/JSONのリクエスト方法を2通り見てきましたが、POSTMANで示したリクエストの中身を展開する方法はデバグ時に有効です。実際のプログラム開発で上手くいかない時には、まずこれを成功させて、リクエスト内容の違いを見比べながらこれと等価なリクエストになるように詰めていくと上手くいきます。

 kintoneに限らず、Web-APIを利用した開発時にお役立て頂ければ幸いです。

I2Cセンサー取扱いのコツ

 これまでにも触れてきましたが、Raspberry PiのGPIOにはI2Cと呼ばれるシリアル通信用端子が準備されており、I2C対応センサーの実装に利用可能です(I2CはArduino等でも対応しています)。

 

 I2C温度センサーは、「TMP102データシート)」や「ADT7410データシート)」あたりが有名どころかと思います。今回は、以前からよく使っているADT7410を例にI2Cセンサーの取扱いについてご説明します。

 

 データシートで「データを格納しているレジスタのバイト(ビット)長」と「換算式や分解能」を確認しましょう。

f:id:yamaryu0508:20140903011420j:plain

(ADT7410のデータシート P12) 

 

読んでみると、ADT7410は標準13bit(2バイト)で、その際の分解能は1/16(0.0625)とあり、換算式も記載されています。さらに13bitの際には出力対応表(代表値)まで掲載されています。これらを書き下すと、次のようになります。

 

f:id:yamaryu0508:20140902011621j:plain

 

 ここで、前回PythonでのI2Cセンサーの値を読み出している部分の記述を見直しながら計算過程を追っていきましょう。

# 以下、センサーの値読み出し部分の抜粋
data = smbus.SMBus(self.channel).read_i2c_block_data(0x48, 0x00, 2)
temp = (data[0] << 8 | data[1]) >> 3
if(temp >= 4096):
temp -= 8192
value = temp * 0.0625

 

 はじめにread_i2c_block_data(0x48, 0x00, 2)関数の第3引数の2は読み出すデータバイト長を表しています。今回は13bitですので、2バイト必要です(3ビット余計ですが)。

 

 次に、data[0] << 8data[0] << 8 | data[1]、さらに(data[0] << 8 | data[1]) >> 3の部分を見て行きましょう。

 日本語で書くと、「①data[0]をまるっと8ビット左シフトして、②data[1]とOR演算で繋いで、13ビットを取り出すために、③3ビット右シフトして不要部分を削る」ということになります。絵で描くと次のような感じです。

f:id:yamaryu0508:20140903075435j:plain

 

 最後に、最上位ビットが1すなわち4096以上の場合には、負数となるので8192との差をとり、13bit設定時の分解能である1/16(0.0625)との積をとれば、データシートにあるように摂氏温度(真値)を得ることが出来ます。

 

 いかがだったでしょうか?センサーのデータシートには換算式が示されることが多く一見分かった気になりますが、サンプルコードにおけるビット演算と分解能の計算部分のフォローが少なく、ここででつまずくことも少なくないのではないかと思います。これを押さえておけば、他のセンサーでも怖いもの無しですので、参考にして頂ければと思います。

Raspberry PiによるIoT(M2M)【I2C温度センサー/xively/Python】

 そろそろRaspberry Piで「Machine to machine(M2M)」、「Internet of things(IoT)」をやっていきましょう。Raspberry PiではI2Cのインターフェースが準備されていますので、今回はこれを利用した温度センサーの読み込みからクラウドへのデータ連携までをやっていきます。【12/5追記】RPi側のスクリプトNode.js版についてもご紹介していますので、興味があられる方はお合わせてご覧ください。【12/26追記】連携先クラウドをkintoneにしたケースが「cybozu.com developer network」のTipsとして掲載されました。

 

f:id:yamaryu0508:20140820015213j:plain

 

 温度センサーはADT7410を使いたいと思います。Raspberry PiはRASPBIANのインストールとネットワークの設定まで終わっていれば問題ありません。

 

手順1 Raspberry Piとセンサーの結線

 詳しい説明は省略させて頂きますが、次の回路図の通りに結線するとOKです。

f:id:yamaryu0508:20140831201642j:plain

 

手順2 I2Cの設定

 (2015/3/10追記)I2Cの設定については、2015-02-16版のRASPBIANでDEVICE TREEを使った方法に変更になりましたので、この場合の設定方法についてはこちらをご覧ください。これ以前の方法であれば、このまま読み進めて頂いて、大丈夫です。

 

 はじめに、/etc/modulesi2c-devを書き足します。

$ sudo vi /etc/modules

# (変更箇所のみ記載)
i2c-dev

f:id:yamaryu0508:20140819013208j:plain

 続いて、/etc/modprobe.d/raspi-blacklist.confblacklist i2c-bcm2708コメントアウトします。

$ sudo vi /etc/modprobe.d/raspi-blacklist.conf

# (変更箇所のみ記載)
#blacklist i2c-bcm2708

f:id:yamaryu0508:20140819013234j:plain

 これで、ひとまずRaspberry PiでI2Cが使えるようになりますが、設定の有効化のため、再起動しておきます。

$ sudo reboot

 

手順3 I2C動作確認ツールのインストール

$ sudo apt-get update

$ sudo apt-get install i2c-tools

f:id:yamaryu0508:20140817212045p:plain

 

手順4 センサーの動作確認

 ここで、センサーの動作確認を行います。sudo i2cdetect -y 1とします。センサーを外した状態と付けた状態で比較すると、今回使っているセンサーの判別がしやすいです。

f:id:yamaryu0508:20140817212703j:plain

今回のアドレスは、0x48であることがわかります。

 

手順5 python-smbus(Python用のI2Cツール)のインストール

 ここで、PythonからI2Cバスをコントロールするための「python-smbus」をインストールします

$ sudo apt-get update

$ sudo apt-get install python-smbus

f:id:yamaryu0508:20140817213326p:plain

 

手順6 Pythonスクリプトによるセンサーからクラウド連携

 Raspberry Piの「Pi」は「Python」とかかっていたりするので、今回センサーの値読み出しからクラウド連携を実行させるのにはPythonを利用したいと思います。今回クラウドは「Machine to machine」、「Internet of things」ではポピュラーな「xivelyAPIドキュメント)」を使ってみたいと思います。プログラム実行時には、I2Cデバイスへのアクセスがありますので、 sudo python m2mSample.pyのように sudoをつけてください。もしくは、 sudo adduser pi i2cI2Cグループにアクセスユーザーを追加することで、 python m2mSample.pyのような実行も可能になります(グループ追加時は sudo rebootで再起動しておきましょう)。

 更に、今回HTTPリクエストに requestsモジュールを利用していますので、インストールされていなければ大変便利なモジュールですのでこれを機にこちらからインストールしておきましょう。

 また、I2Cセンサーからの値の読み込み部分については、別途こちらで詳しく解説させてもらっていますので、参考にして頂ければと思います。※Gistの表示がされない時には、こちらから直接ご覧ください。

 

xivelyの設定ページから取得した {X-ApiKey}{Feed ID} を冒頭部分で定義してもらえれば、次のように連携できます。

 

f:id:yamaryu0508:20140819233033p:plain

 

このように電子工作とクラウドの連携は技術的な敷居も下がってきていますので、今後も色々と試していきたいと思います。