Category Archives: C.H.I.P.

C.H.I.P. (8) BMP280 i2c

OLED繋いだから、早速同じi2cのBMP280を試す。

chen@chip:~$ git clone https://github.com/prisme60/BMP280.git

コメントに書いてる方法でコンパイル

chen@chip:~/BMP280$ gcc -Wall -o BMP280 ./BMP280.c
./BMP280.c: In function ‘main’:
./BMP280.c:339:2: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode
for(int i = 0; i < argc; i++) {
^
./BMP280.c:339:2: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
./BMP280.c:371:4: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode
for(int i=0;i<20;i++) {
^

エラーがたくさんある。オプションがつければいいらしい。

chen@chip:~/BMP280$ vi BMP280.c

でもソースを斜めてみると、二箇所だけfor文に定義するから、簡単に直せる。ただ定義文を関数先頭に書くだけ。

chen@chip:~/BMP280$ gcc -Wall -o BMP280 ./BMP280.c
chen@chip:~/BMP280$ ./BMP280

i2c_Open : Failed to open the i2c bus, error : 13
Check to see if you have a bus: /dev/i2c-1
This is not a slave device problem, I can not find the bus/port with which to talk to the device

sudoじゃないとダメだね。

chen@chip:~/BMP280$ sudo ./BMP280

Device accessed via File descriptor:3 at Address:0x76 has returned:0
[0]=3 [1]=6E [2]=B5 [3]=66 [4]=32 [5]=0
T1=28163 T2=26293 T3=50
P1=38053 P2=-10790 P3=3024 P4=7462 P5=-175 P6=-7 P7=15500 P8=-14600 P9=6000
adc_Temperature=536630 adc_Pressure=311387
{“temperature”:26.96,”Pressure64″:1017.5,”Pressure32″:1017.5,”PressureDouble”:1017.5}
adc_Temperature=536636 adc_Pressure=311390
{“temperature”:26.97,”Pressure64″:1017.5,”Pressure32″:1017.5,”PressureDouble”:1017.5}
adc_Temperature=536636 adc_Pressure=311390
{“temperature”:26.97,”Pressure64″:1017.5,”Pressure32″:1017.5,”PressureDouble”:1017.5}

延々と続く…

C.H.I.P. (7) OLED i2c

NokiaのLCDを付けるつもりで進んていたが、接続例が見つからないので、例があるOLEDにした。

Battery Connector, OLED, BMP280, Buttons shield

バッテリー、OLED、温度気圧センサー、いくつボタンを入れたシェルターを作った。(バッテリーちょっと大きかった)

OLEDは、i2c-1に繋いだ。

いざmakeすると、足りないものが多いので、足しながら、makeが成功。

root@chip:/home/chip# apt-get update #しないと、パッケージインストールがうまくいかない

root@chip:/home/chen# git clone https://github.com/vkomenda/ssd1306.git

root@chip:/home/chen# cd ssd1306/

root@chip:/home/chen/ssd1306# apt-get install gcc make #make がまたないので、追加

root@chip:/home/chen/ssd1306# make

 

これてやっと完了。

root@chip:/home/chen/ssd1306# ./ssd1306_demo /dev/i2c-
i2c-0 i2c-1 i2c-2
root@chip:/home/chen/ssd1306# ./ssd1306_demo /dev/i2c-1

devには、i2cは3つもあるので、繋がっているのは、i2c-1でしょうだから、試したら、成功。

 

C.H.I.P. (6) battery work

C.H.I.P. には、バッテリーの利用、充電機能がついてる。

使えるのは  Polymer Lithium Ion Battery、3.7V.

コネックタはちょっと特殊( jst ph 2-pin connector )だから、よくある買ったもの( JST XH2.54 2 Pin Connector)はそのまま使えない。

そこで、jst ph 2-pin connectorを購入して、変換することにした。

バッテリーを使う一番のメリットは、システム安定した。以前重い作業(updateとか)すると、よくフリーズする、ちょっと中国製もの遠慮勝ちになったが、バッテリーをつけると、フリーズすることがなくなた。問題は電源だね、ちょっと自信が取り戻した。

バッテリーの状態は、コマンドで確認できる。

root@chip:/home/chip# battery.sh
BAT_STATUS=0
CHARG_IND=1
BAT_EXIST=1
CHARGE_CTL=0xc9
CHARGE_CTL2=0x45
Battery voltage = 4143.7mV
Battery discharge current = 0mA
Battery charge current = 638.5mA
Internal temperature = 45.8c

そして、パーセント表示もできる。

chen@chip:~$ cat battery_perc.sh
date
REGB9H=`i2cget -f -y 0 0x34 0xb9` # Read AXP209 register B9H
PERC_CHG=$(($REGB9H)) # convert to decimal
echo “Battery is at $PERC_CHG %”
chen@chip:~$

chen@chip:~$ sudo sh battery_perc.sh
Thu Sep 14 07:20:37 UTC 2017
Battery is at 99 %

 

C.H.I.P. (5) Flash CHIP

C.H.I.P.は全部7台も購入した。

kickstandで2台購入し(Kernel 4.3)、getchipでその後追加5台追加した(Kernel 4.4)。

最初の2台は、特に問題なく使えたが、後追加5台は何と2台は使えない。

しばらく忙しいので倉入りでしたが、そろそろIoTに活用すると思って、リモート操作しやすいため、XRDPを入れると思って、エラーになって。

#apt-get update

これて改善すると思って、なぜかupdate中 いきなり電源オフ!!XRDP, git などインストールできないと、なにもできない状態!原因不明のまま、そのうち2台は使えない状態になった。

一台は、ブート途中で止まり、もう一台はどうしてもupdateできない。

getchipのサイトを見ながら、Flash CHIPすれば、改善する可能性があるから、その2台をFlashして見た。ついでに初期の2台を最新版の(Kernel 4.4)にアップする。

http://flash.getchip.com/

を見ながら、いろいろ苦労して、 re-flash CHIPができた。おもな問題はケーブル合わないと、Windowsでドライバーがうまくいかない。最終は特定にケーブルとiMacで作業成功。

それからブートも正常進行、apt-get updateも問題なく、upgradeが終わったら、debian 8.7 になった。

root@chip:/home/chip# uname -a
Linux chip 4.4.13-ntc-mlc #1 SMP Tue Dec 6 21:38:00 UTC 2016 armv7l GNU/Linux
root@chip:/home/chip# cat /etc/debian_version
8.3
root@chip:/home/chip# uptime
 07:30:48 up 7 min,  3 users,  load average: 2.33, 1.80, 0.93
root@chip:/home/chip# uptime
 07:32:29 up 9 min,  3 users,  load average: 2.74, 2.04, 1.10
root@chip:/home/chip# cat /etc/debian_version
8.7
root@chip:/home/chip# exit
chip@chip:~$ logout
Connection to 192.168.11.128 closed.
chen@raspberrypi:~ $

めでたく。

C.H.I.P. (4) LED Blink

しばらくC.H.I.P. を放置したが、そろそろ再開すると思って。とりあえずLED Blinkでワームアップする。

Network Setup

基本的に、ssh で作業を進むので、WiFi環境で使うため、まずネットワーク設定するが必要。

小さな4インチコンボージットモニターしかないので、USB接続でセットアップすると思ったが。意外にも大丈夫。画面でネットワークを設定したら、IPを確認する。

$ sudo ipconfig

ssh login

IPを確認したので、早速ssh でログイン。

下記のコマンドで、ssh開始。デフォルトユーザは「chip」であり、パスワードも「chip」になっている。

chen@raspberrypi:~ $ ssh chip@192.168.11.128

chip@chip:~$

Python Library Install

Pythonライブラリをインストールする

chip@chip:~$ sudo apt-get install git
Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Unable to locate package git
chip@chip:~$
chip@chip:~$ sudo apt-get update
なぜか、このコマンドして、しばらくchipは電源オフ。
どこか熱いでもないのに
お手上げ状態!

C.H.I.P. (3) iBeacon

最初の9ドルコンピュータC.H.I.Pの作品はiBeaconにすると思う。

Mechanism

普通iBeaconはクーボンなどの配信をする機器だか、こちらはこどもの下校帰宅の知らせ機器にする。機能として:

  1. こどもにiBeacon持たせて、帰宅すると感知する
  2. 感知したら、区別して「XXXちゃん、お帰り」をしゃべり
  3. 親にメールを送る「XXXちゃん帰宅」
  4. (将来)親の伝音をしゃべる

名刺半分サイズだから、PCスピードなどの中に空いてる空間に組み込むして運用すると考える。

 

Bluetooth検知

まずBluetooth検知から。下記のサイトを見ながら、教科書通りまずBluetooth keyboardからと考えた。

http://docs.getchip.com/#connecting-bluetooth-devices

C.H.I.Pには、Bluetooth 内蔵、OSも内蔵なので、特になにもインストールの必要がなく利用できる。まずbluetoothctlコマンド使って、find, pair with, and connectなどを試す。

  • root@chip:~# bluetoothctl
    [NEW] Controller 7C:C7:08:DE:2A:4E chip [default]
    [bluetooth]# power on
    Changing power on succeeded
    [bluetooth]# scan on
    Discovery started
    [CHG] Controller 7C:C7:08:DE:2A:4E Discovering: yes
    [NEW] Device DD:52:20:CC:66:BA N0U9Z

の感じで、もう新しいDevice 見つかった。その後延々と周囲のBluetooth 機器の情報を報告。

このN0U9Zはなぜか用意したBluetooth keyboard(電池切れ?)ではなく、近所のiBeaconらしい。そうしたらも教科書通りBluetooth keyboard接続など飛ばして、自分が用意したiBeaconで体験を継続。

Raspberry Piと iBeacon関連サイトを調べて、必要な情報収集を行った。そこでわかって、bluetoothctlコマンドで対話式操作の他に、hcitool lescan で近くに BLE の端末がある場合は近づけると Mac アドレスとデバイス名を表示することもできる

  • hcitool lescan — BLE 検知テスト

 

node.js/bleacon 環境構築

検出ができたので、実現したい機能をプログラミングするだが、プログラミング環境として、まずnode.jsを考えた。

nodebrewnode.jsをインストールして、それからbleaconというモジュールでBluetooth を操る。

bleaconを利用するために、まずは node.js をインストール。node のバージョン管理を行う nodebrew を利用してインストール。

C.H.I.Pには、curlもないので、そのインストールから

  • root@chip:~# apt-get install curl
  • root@chip:~# curl -L git.io/nodebrew | perl – setup
  • chen@chip:~$ vi .bashrc
  • chen@chip:~$ source .bashrc
  • chen@chip:~$ nodebrew install-binary v0.10.28

しかし”v0.10.28 is not found”と怒られて。node.jsしばらく放置したので、この間結構変わった。日本語のページは古いのままだが、英語のページも最新版4.4.0になった。それをインストールに。

  • chen@chip:~$ nodebrew install-binary v4.4.0
  • chen@chip:~/ibeacon$ npm install bleacon
    npm WARN optional dep failed, continuing xpc-connection@0.1.4
    npm WARN optional dep failed, continuing xpc-connection@0.1.4
    > bignum@0.11.0 install /home/chen/ibeacon/node_modules/bleacon/node_modules/bignum
    > node-gyp configure build
    make: Entering directory ‘/home/chen/ibeacon/node_modules/bleacon/node_modules/bignum/build’
    CXX(target) Release/obj.target/bignum/bignum.o
    make: g++: Command not found

しかしそのbleaconというモジュールのインストールにエラーがたくさん出るから、お手上げ。

 

python/pybluez/iBeacon-Scanner 環境構築

ネットいろいろ検索して、kakakikikekeのサイトを参考にpythonで試すことにした。

Python から操作するためのライブラリをインストールします
pip を使うのでインストールしています

  • sudo apt-get -y install python-pip
  • sudo apt-get install python-dev libbluetooth-dev libboost-all-dev
  • sudo pip install pybluez
  • sudo pip install pybluez[ble]

ここもエラーが見回り、pybluez[ble]のインストール失敗でした。

ここで試しにiBeacon-Scanner を入れてなんど機能した。

サンプルのソースは簡単で、10個 BLE情報を受信すると情報を出力しつづけてくれる。

 

これてこどもの下校帰宅の知らせ機器は、pythonでプログラミングすると決定。できたらまたレポートする。

 

参考サイト:

C.H.I.P. (2) Web IoT

話題のIoTが、Raspberry Piですでに試したが、今度9ドルコンピュータC.H.I.Pでいろいろ体験すると思う。

まずWebから、LEDのON/OFFを試す。

1)環境作成:

最新状態にする

root@chip:~# apt-get update
root@chip:~# apt-get upgrade

localesを再インストールする。

root@chip:~# apt-get purge locales
root@chip:~# apt-get install locales
root@chip:~# dpkg-reconfigure locales (en_US.UTF-8 を選ぶ)

#これをしないと、下記のエラーは延々と出る。

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

apache2インストール

root@chip:~# apt-get install apache2
root@chip:~# a2enmod cgi.load
root@chip:~# /etc/init.d/apache2 restart

c環境をインストールする。

root@chip:/home# apt-get install gcc make

2)プログラミング

rootの実行権限でLEDを操作するから、最初Perlで簡単に作れると考えたが、うまくいかない。

下記の参考ページで、C言語で作った。

root@chip:/usr/lib/cgi-bin# cat on.c
#include        <stdio.h>

int main()
{
system(“/usr/sbin/i2cset -f -y 0 0x34 0x93 0x1”);
printf(“Content-type: text/htmlnn”);
printf(“<HTML><BODY>”);
printf(“<H2>Hello! On</H2>”);
printf(“</BODY></HTML>”);
return 0;
}
root@chip:/usr/lib/cgi-bin# cat off.c
#include        <stdio.h>

int main()
{
system(“/usr/sbin/i2cset -f -y 0 0x34 0x93 0x0”);
printf(“Content-type: text/htmlnn”);
printf(“<HTML><BODY>”);
printf(“<H2>Hello! Off</H2>”);
printf(“</BODY></HTML>”);
return 0;
}
root@chip:/usr/lib/cgi-bin#

コンパイルする

cc -o on on.c
cc -o off off.c

rootの実行権限を与える

chmod +s /usr/lib/cgi-bin/o*

3)プログラミング実行

最初に、コマンドラインで、LEDのOn/Offを確認する。

root@chip:~# /usr/sbin/i2cset -f -y 0 0x34 0x93 0x1 #On
root@chip:~# /usr/sbin/i2cset -f -y 0 0x34 0x93 0x1 #On

ブラウザから、LEDのOn/Offを試す

http://192.168.0.104/cgi-bin/on
http://192.168.0.104/cgi-bin/off

順調なら、話題のIoTが、まずWebから、LEDのON/OFFを試すことができた。

2016-03-08 (1)

2016-03-08 (2)

これから時間が空いたら、Raspberry Piの温度センサー、WebCameraもこちらに動かしてみる。

あとiBeaconの近接通知機能が試したいので、iBeaconのモジュールを注文した。

参考:

http://null-byte.wonderhowto.com/how-to/introduction-c-h-i-p-by-next-thing-co-iot-hacking-device-0168749/

C.H.I.P. (1) Introduction

 

Next Thing Co社の9ドルコンピュータC.H.I.Pが届いた。

去年6月KickStater注文したので、また忘れかけたころに、届いた。

最初は9ドル一台に、送料の方が高いで15ドル。その後一台追加で、トータル33ドルなり、平均一台2000円未満。

C.H.I.Pは、Raspberry Piに似ている、マイクロ・コンピュータというもの、一番大きな違いは、値段とサイズ、そして予め802.11 b/g/n Wifi とBluetooth 4.0と4GのeMMCストレージ内蔵のこと.しかもLiPoバッテリー内蔵可能。

開封して、意外に小さいと、ビデオケーブルが短いと感じる。どう繋ぐかちょっと悩んでいたが、昔のビデオ切り替えスイッチが思い出して、探し出して繋がってみたら、ぴったりじゃないか!電子機器と部品自宅に溜まる一方で断捨離は時には問題。このビデオ切り替えスイッチ捨てたら、なにか買わない繋がらないね。USBハブでキーボードとマウスをつなぎ、マイクロUSBの電源をつなぎ、それだけで完成。

4GのeMMCストレージにOS内蔵し、Raspberry Piのように、ブートSD作る必要がない。電源スイッチだけで立ち上がた。

2016-03-06 23.37.35

コンポジットの解像度は昔のVGA、WiFi設定などが十分でした。IoTのマシンとして活用する予定って、ssh、Webサービス際使えるなら、モニターが必要がない。

root@chip:~# uname -a

Linux chip 4.3.0 #10 SMP Sat Nov 14 19:10:05 PST 2015 armv7l GNU/Linux

root@chip:~# cat /etc/debian_version

8.2

Linux のカーネルは4.3.0、OSはdebian8.2でした。

BLE(Bluetooth Low Energy)内蔵のため、これだけでiBeaconの近接通知機能が試せる、LiPoバッテリー内蔵すると、数時間モバイル運用も可能、いろいろの試すが可能だ。