■在庫状況(2019年6月28日更新)■
現在Zero W用がスイッチサイエンス様にて在庫切れになっていますが、手元在庫から補充しますので7月中旬にはご購入可能になります。おまたせして申し訳ありませんがよろしくお願い致します。
Zero W用コネクタ取り付け済バージョンはスイッチサイエンスさん委託販売申請中ですが、それまではとりあえずBOOTHで販売します。
Zero W用コネクタ取り付け済バージョンはスイッチサイエンスさん委託販売申請中ですが、それまではとりあえずBOOTHで販売します。
■追記(2017年2月22日)■
fabcross様に紹介記事を掲載していただきました!Raspberry piをタイマでON/OFFできる「RPi1114-Raspberry Pi電源制御モジュール」
■RPi1114FDH28■
RPi1114は、Raspberry Piに重ねて使うモジュールです。モジュールに搭載したLPC1114でRaspberry piの電源をコントロールします。お買い求めはこちらから(スイッチサイエンス社)
モジュールに5V3A程度のACアダプタを接続すると、モジュールからRaspberry Piへ電源が供給されます。電源供給はLPC1114によってON/OFF可能です。たとえば、太陽電池とバッテリを電源として屋外に設置したRaspberry Piとカメラを一定時間ごとに起動して撮影し、撮影が終わったら自動的にRPiの電源を切る、という使い方が可能です。
出荷時インストール済のプログラム(mbed.orgで公開)では、RPiからI2Cでコマンドを受け取ると、受け取った秒数経過後にRPiへの電源供給をonまたはoffにします。
例:
sudo i2cset -y 1 0x28 0x11 0x00 0x10 0x36 0x30 0x00 i …60秒後にoff
sudo i2cset -y 1 0x28 0x10 0x00 0x10 0x33 0x30 0x30 0x30 0x00 i …3000秒後にon
モジュール上のLEDを制御できます。
例:
sudo i2cset -y 1 0x28 0x20 0x00 0x00 i …led 消灯
sudo i2cset -y 1 0x28 0x20 0x00 0x01 i …led 点灯
sudo i2cset -y 1 0x28 0x20 0x00 0x02 i …led 点滅
アナログ入力ポートからデータを読み込めます。
例:ch #2(dp11)から読み込み
sudo i2cset -y 1 0x28 0x30 0x02 0x00 i
sudo i2cget -y 1 0x28 0x30 w
指定した間隔でアナログ入力ポートからデータを読み込み、まとめてRPiから取り込むことができます(最大100件まで)。この間、RPiは何もしなくて結構です。なおi2cgetでは最初の1語しか読めないので、データの取り込みにはnode, Python, c言語などを使用してください(この機能は2017-01-16現在、問題が発見され修正中です)。
例:ch1(dp10)から500m秒間隔で読み込みを開始し
sudo i2cset -y 1 0x28 0x32 0x01 0x10 0x35 0x30 0x30 i
sudo i2cset -y 1 0x28 0x34 0x01 0x10 0x00 i
sudo i2cget -y 1 0x28 0x34 w ....i2cgetでは件数のみ取得できます
デジタルポートの読み込み
例:ch #1(dp6)から読み込み
sudo i2cset -y 1 0x28 0x50 0x01 0x00 i
sudo i2cget -y 1 0x28 0x50 w
デジタルポートの書き込み
例:ch #0(dp26)へ書き込み
sudo i2cset -y 1 0x28 0x60 0x00 0x10 0x31 0x00 i
PWM出力
例:ch #0(dp1)のPWM周期を100μ秒にセット(10khz)
sudo i2cset -y 1 0x28 0x41 0x00 0x10 0x31 0x30 0x30 0x00 i
例:ch #0(dp1)へ20%PWM波(約0.64v相当) を出力
sudo i2cset -y 1 0x28 0x40 0x00 0x10 0x32 0x30 0x30 0x00 i
ファームウェアバージョン取得(戻り値 0xffffはver 1.00以前を示します)(2017-01-17)
sudo i2cget -y 1 0x28 0x00 w
なお、利用可能なchや詳細なコマンドについてはこのページの末尾を御覧ください。
モジュール上のLPC1114へはRaspberry Piからバイナリをアップロードすることができます。
DCジャックの近くにあるスイッチsw1は、プルアップしてdp25とgndにつながっています。スイッチを押すとdp25はLOW(0)になります。デモプログラムではスイッチを押して離した時にRPiへの電源を強制的にon / offすることができます。なお、スイッチを操作してもRPiへの通信等は発生しないので、sw1でoffするまえにちゃんとRPiをシャットダウン(sudo poweroff)しておいてください。sudo poweroffしたあと電源ケーブルを引っこ抜かずにRPiの電源を切ることのできるスイッチ使うと便利です(私自身、愛用しています)。
余ったスペースにユニバーサルパターンも用意しました。上下に電源ライン、中央部に縦2本の短絡ラインを設けています。LPC1114の余ったGPIOを外に引っ張り出せるようにピンに出しておきました。普通のLPC1114として利用することができますので、例えばLPC1114のADCを使ったアナログ入力や、GPIOを用いたロータリエンコーダーの読み取り処理など、RPiの苦手な作業を代行することも可能です(そのためのプログラムはご自身でお願いします。開発のご依頼は info@kurahashi-ya.com までご相談ください)。
末尾にrelease noteがありますので、ご参照ください。
■動作モードについて■
モジュール上のジャンパで、基板の動作モードを選択できます。どちらかのモードを選択してください。- from RPi
RPiから3.3vを供給します。この場合は、このモジュールにはACアダプタを接続しないでください。 - to RPi(出荷時設定)
ACアダプタからこのモジュールに5Vを供給し、電源制御回路を経由してRPiへ電源を供給します。この場合にはRPiの電源供給用マイクロUSBには何も接続しないでください。
■このモジュールの他に必要なもの■
- Raspberry Pi B以上
Raspberry Piがなくてもこのボードは動きます(意味ないですが)。 - 5V出力のACアダプタ(DCプラグは2.1mmセンタープラス)
このボード自体の消費電流は17mA以下なので、お使いのRPiに合わせてください。
■このモジュールとRPiの接続について■
20x2ピン(40ピン)のピンソケットでRaspberry Piと接続します。ズレないように気をつけてください。ズレた状態で電源を入れるとRPi1114は確実に死にます(経験者・談)。
モジュールと接続されているピンは以下の通りです(詳細は回路図をご参照ください)。
モジュールと接続されているピンは以下の通りです(詳細は回路図をご参照ください)。
- 5Vまたは3V
どちらかをジャンパで切り替えます。5VはこのモジュールからRPiへ電源を供給するモード、3.3VはRPiのマイクロUSBに電源を接続してこのモードへ電源を供給するモードです。詳しくは、後述の「動作モードについて」をご参照ください。 - GND
- GPIO23とDP24 / GPIO24とDP23
RPiのGPIO23とGPIO24でLPC1114のRESET/ISP端子を制御しています。 - TXDとDP15(RXD)、RXDとDP16(TXD)
シリアルをクロス接続しています。LPC1114へプログラムを書き込む際に使用します。シリアル通信にも使えるはずですが、I2Cを使うほうが楽だと思います。 - SCLとDP27、SDAとDP5
I2Cです。RPiがマスタとして動作します。
■コネクタについて■
このモジュールはRPiのコネクタに直接接続して使用します。フラットケーブルなどを経由することも可能ですが、最大で2.5Aの電流が流れるので良質のものを使用してください。秋月やスイッチサイエンスで売っているものは大丈夫だと思いますが、ダメなケーブルを使うと溶けます(経験者は語る)。ダメなケーブルの見分け方は、価格よりもニオイです。ダメなケーブルって異様に化学臭するんですよね。
■RPi1114上のLPC1114にプログラムを書き込む■
大まかな手順としては、- ACアダプタを外す
- ジャンパピンを「from RPi」に差し替える
- RPiにマイクロUSBから電源を供給しRPiを起動する
- lpc21ispをインストールします
- なんらかの方法でLPC1114用バイナリを用意します
- lpc21ispで書き込みます
です。
■lpc21ispのインストール■
apt-getでもインストールできるのですが、apt-get版はRESET/ISPピンの制御ができないので書き込みできません。もしインストール済の場合には、sudo apt-get remove lpc21ispで削除してください。
インストールの手順は以下の通りです。
cd
git clone https://github.com/capiman/lpc21isp.git
cd lpc21isp
make
sudo cp lpc21isp /usr/local/bin
sudo chown root:root /usr/local/bin/lpc21isp
■LPC1114用バイナリの用意■
プリインストールされたデモプログラムを再インストールする場合は、githubからバイナリ(RPi_1114_LPC1114.bin)をダウンロードしてください。忘れたころにバージョンアップしていきますので、思い出したらチェックしてみてください :-)上記デモプログラムに手を加えたり、オリジナルのプログラムを使いたい場合には手っ取り早くmbedのオンラインIDEを使います。mbed以外の方法もありますが、それは他の方の記事をご参照ください。
デモプログラムを例に説明します。
- mbed.orgにサインアップする
- mbedリポジトリを開き、import into compilerをクリック
- mbedオンラインIDEのページが開くのでダイアログ上でImportをクリック
- インポートされたRPi_1114のmain.cppを開き、コンパイルをクリック
これでMac / PCのダウンロードディレクトリに「RPi_1114_LPC1114.bin」が落ちてきます。
なお、mbedのオンラインIDEはRPi上のIceweaselブラウザでも使えるみたいです(私は試してません)
■lpc21ispで書き込み■
HDMI+USBマウス+キーボードの場合にはシリアルがあくので問題ないのですが、sshでRPiで接続している場合にはRPiのシリアルターミナルの機能を止めないとlpc21ispは「シリアルポート使えない」というエラーを出します。以下の手順でシリアルコンソールを止めてください。- /boot/cmdline.txtを開いて console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 を削除
- rebootし、再度sshでログインした後、
sudo systemctl stop serial-getty@ttyAMA0.service
で、コンソールを停止にする
また、RPi3でlpc21ispが動作しない(RPi1114上のLED D1がうっすら点灯していてSynchronizing (ESC to abort)..............が止まらない)場合には、/boot/config.txtの末尾に dtoverlay=pi3-miniuart-bt を追加してみてください(編集後に再起動)。
次にGPIO23とGPIO24を出力として有効にします(これもラズパイ起動ごとに1回)。
sudo echo 23 > /sys/class/gpio/exportあとはlpc21ispで書き込むだけです。
sudo echo 24 > /sys/class/gpio/export
sudo echo out > /sys/class/gpio/gpio23/direction
sudo echo out > /sys/class/gpio/gpio24/direction
sudo lpc21isp -gpiorst24 -gpioisp23 -controlinv -bin RPi_1114_LPC1114.bin /dev/ttyAMA0 115200 48000
うまく書き込みができたら、ボード上のLEDが1秒周期で点滅しているはずです。以下のコマンドで消灯すればたぶんOKです。
sudo i2cset -y 1 0x28 0x20 0x00 0x00 i
■回路図, 基板データ, 制御プログラム■
我ながら単純な回路ですが、すべてgithubにオープンソースとして公開します。ただし、Eagleの一部部品に他の方の作成したライブラリを使用しており、その公開ポリシーに従います。
作者の皆様方に感謝申し上げます。
■サポート■
ご質問などは、MeWe「RPi1114 - Raspberry Pi 電源制御モジュールのサポートページ」にお願いします(2019/03/06 - Google+から移転しました)。意味 | 詳細 |
命令コード | 動作指示 0x00 - 0xFF |
チャンネル番号 | GPIO, Analogポートなどの番号を指定 0x00 - 任意のチャンネル番号 |
モード指定 | パラメータがバイナリかASCII数字かを 指定 0x00 : バイナリ 0x10:ASCIIコードのc string |
バイナリパラメータ | 32ビット符号なし整数 / little endian |
ASCIIパラメータ | "0" - ”2147483647” |
ブロック | 動作 | command | channel | mode | パラメータ |
ファームウェア | ファームウェアのバージョンを返します。 なお、ver 1.00のみ0xffffを返します。 | 0x00 | - | - | - |
RPi電源 | パラメータで指定した秒数後にRPiの電源をON | 0x10 | - | 0x00 | 0x10 | 0秒以上(秒単位) |
パラメータで指定した秒数後にRPiの電源をOFF | 0x11 | - | 0x00 | 0x10 | 0秒以上(秒単位) | |
LED | LEDを制御 | 0x20 | - | 0x00 | 0x10 | 0 : 消灯 1:点灯 2:点滅 |
アナログ | アナログポートを読み込む | 0x30 | 0 - 2 | 0x00 | 0x10 | - |
アナログ読み込みバッファを初期化 | 0x31 | 0 - 2 | 0x00 | 0x10 | 読み込み間隔 100ミリ秒以上 (ミリ秒単位) | |
アナログバッファへ読み込みを開始 | 0x32 | 0 - 2 | 0x00 | 0x10 | ||
アナログバッファへ読み込みを停止 | 0x33 | 0 - 2 | 0x00 | 0x10 | ||
アナログデータをダウンロード | 0x34 | 0 - 2 | 0x00 | 0x10 | ||
(バッファはチャンネルあたり256個まで) | |||||
PWM | PWMを出力 | 0x40 | 0-2 | 0x00 | 0x10 | |
PWM周波数(周期)を設定 | 0x41 | 0-2 | 0x00 | 0x10 | ||
デジタル入力 | ポートを読み込む | 0x50 | 0-1 | - | |
デジタル出力 | ポートへ値を出力する | 0x60 | 0-1 | - |
※ファームウェア ver 1.00未満では0x31-0x34までに不具合があります。
GPIO | 役割 | channel番号 |
dp1 | PWM | 0 |
dp2 | PWM | 1 |
dp4 | Digital In | 0 |
dp5 | I2C SDL | |
dp6 | Digital In | 1 |
dp9 | ADC (analog digital converter) | 0 |
dp10 | ADC (analog digital converter) | 1 |
dp11 | ADC (analog digital converter) | 2 |
dp13 | GPIO(未使用) | |
dp18 | PWM | 2 |
dp25 | sw1 | |
dp26 | Digital Out | 0 |
dp27 | I2C SCL | |
dp28 | Digital Out | 1 |
■既知のバグとfix状況■
2017-01-16 ver 1.00
- 0x30-0x34のアナログ関連コマンドにバグ
2017-01-17 ver 1.01
- バージョン番号表示機能を追加
- 0x30アナログ入力コマンドバグ修正
■謝辞■
このプロジェクトに際し要求仕様を提示してくださった林さん、小瀬さんに感謝申し上げます。また、この製品の原型を実際にフィールドでお使いくださっている「かわごえ里山イニシアチブ」の代表理事増田純一さん、機会と美味しいお米をありがとうございました。
製品化にあたって、有益なアドバイスとバグ情報、Python版ツールを提供してくださった遠藤さん、ありがとうございます。
私の駄目な指示に負けることなくちゃんとしたプリント基板と製品を作ってくださったElecrowさんには感謝の言葉もありません。多謝!
最後に、Eagleライブラリなどを提供してくださった作者の皆さんの貢献に感謝と敬意を表します。いつか私が皆さんから受け取った以上のものをお返しできますように。
すばらしすぎます!!!神ですか!!
返信削除メカトラックスのslee-piを利用して開発していましたが、「ちょっと高すぎるなぁ」「ATTinyで作ればコスト1/10だけど面倒だなぁ」と思っていた所にこれを見つけて即スイッチサイエンスで買いました。
ADCがついてる、ユニバーサルパターンがついてる、PWMがついてる、i2cで制御できる、mbed部分をオープンソースで公開してる。
しかもADCは本体オフでもバッファにためておけるとか!!
何から何まで最高です。痒いところに手が届きすぎです。
ありがとうございます。
削除ADCのバッファは複数チャンネル分用意しているのでチャンネルごとの記憶数は多くないのですが、1chだけでよければもっと長く記録するように書き換えるのも簡単だと思いますので、ご遠慮なくソースをいじくり回してください:-)
あ、何か改良点を見つけたらpull request送ってくださいね。
RPi1114FDH28がお役に立つことを願っています。