Particle Electronで使うcurlコマンド

particle Electron始めて見たのでメモ

Particle Electronを使ってると、APIを叩こうみたいな場面が出てきて
https://docs.particle.io/guide/getting-started/examples/electron/#use

curlコマンドを使うが使い方をよくわかってないとつらい

APIを叩く時にコマンドライン上でcurlコマンドを打つことが多いみたいなのでメモ
尚、curlの詳しいマニュアル(man)は以下を参照
curl.1 man ページ

Particle ElectronのAPI詳細については以下を参照
https://docs.particle.io/reference/api/

Read More

Rubyの正規表現で数字の1~10を表す


このエントリーをはてなブックマークに追加

CodeIQのてぃーびーさんからの問題
shoheyコマンド
をやってみたところ正規表現で少しつまずいたのでメモ

詳しい問題の内容は上記ページを参照なのですが
どうやら正規表現で数字の 1~10 のみを取り出す必要があるみたいです

Rubyの正規表現で数字の1~10

意外と情報が出てこなかったのでメモ
参考
http://d.hatena.ne.jp/seuzo/20080514/1210756204

結論から書くと

1
number =~ /(?<![\.,])\b[1-9]\b(?![\.,])|\A10\Z/

とすれば、numberが1~10の数字の時にマッチしてくれる(はず)

(?<!) は正規表現の「否定後よみ」
(?!)は正規表現の「否定先読み」
\bで単語の境界(今回の場合、数字の前後)を調べる

つまり、数字の前後に余分なもの(小数だとコンマが入るとか、カンマ区切りの数字だったとか)
を排除しつつ
1から9の数字の境界とマッチする(つまり数字が2桁以上だと、境界が無くなってしまうのでマッチしなくなる結果数字一桁が得られる)

プログラマと呼ぶにはまだまだな実力ですが問題も解けました
ここに載せるのははばかられるのでひとまず置いておいて

内容としては有名なFizzBuzz問題のように条件分岐させることで無事クリアできた良かった


このエントリーをはてなブックマークに追加

RaspberryPi, WebIOPi, HomebridgeでiphoneからLED操作

RaspberryPiのGPIOピンをスマホから操作してみる

WebIOPi

RaspberryPiのGPIOを制御できるライブラリ、さらにREST APIも同時に制御できるとのこと(つまりWeb上から制御できる)
http://todotani.cocolog-nifty.com/blog/2016/01/homebridgeraspb.html
http://www.hiramine.com/physicalcomputing/raspberrypi/webiopi_install.html

インストール方法
2016年3月24日現在最新版は 0.7.1みたいなのでそれに合わせた
0.7.1はRaspberry Pi 2には、単純インストールは対応してないみたいなので下記リンクなどを参考にインストールすること
http://deviceplus.jp/hobby/raspberrypi_entry_030/

Read More

Particle Electronを使ってみる


このエントリーをはてなブックマークに追加

Particle Electron

Particle Electronを入手したので、公式のチュートリアル(Particle GUIDE)を読んでみる
https://docs.particle.io/guide/getting-started/intro/electron/

気になるところをメモ

Electron3G本体は US$69

月$2.99で1MBまで、さらに1MB追加ごとに$1.99
https://store.particle.io/?product=particle-electron&utm_source=Proto&utm_medium=Button&utm_content=Electron&utm_campaign=Buy#electron-3g-americas

1
$3 per month for 1MB and 99 cents for every megabyte afterwards

ちなみに、購入したらSIMカードが入ってるので、オンライン上でクレジットカード登録すれば直ぐに使い始めれます便利!
https://docs.particle.io/guide/getting-started/start/electron/

その他電池(リチウムイオンポリマー(Lipo))とかUSBケーブルとかアンテナとか必要なものは最初から同封されてるのでこれだけでもまずは始めれます

2Gの通信規格が使えたらもう少し安いが、日本では3Gの通信規格しか電波が使えないので3Gを選ぶように

消費電力は 800mA ~ 1800mA

データシートを眺めてみると

https://docs.particle.io/datasheets/electron-datasheet/

GSM module (3Gモジュール) が だいたい800mA ~ 1800mA消費するようです

1
u-Blox GSM module on the Electron alone can consume a peak of 800mA to 1800mA

消費電流は180mAから1.8Aまで(5V)で変化するが、ディープスリープモードだと130μAの消費になる

1
Typical current consumption is around 180mA and upto 1.8A transients at 5VDC. In deep sleep mode, the quiescent current is 130uA (powered from the battery alone).

付属の電池が2000mAh(2000mAの電力を消費するデバイスを一時間使用可能)なので、ずっと使い続けると1日持たないのかな、という感じ
(スマホや携帯と似たような間隔ですね)
このあたりはGPSモジュールやWiFiモジュールや3G通信の課題かな

ちなみにUSBは最大500mAしか供給できないので、基本的には電池を接続したまま使用するということになるようです
3Gモジュールの電源はUSB以外にbattery(Lipo、リチウムイオンポリマー)を接続しておく必要がある
ということはバッテリーはそこそこで切れてしまうかもだけど
充電は簡単

1
Most USB ports can supply only a maximum of 500mA, but the u-Blox GSM module on the Electron alone can consume a peak of 800mA to 1800mA of current during transmission. In order to compensate of this deficit, one must connect the LiPo battery at all times when powering from a traditional USB port. The Electron will intelligently source power from the USB most of the time and keep the battery charged. During peak current requirements, the additional power will be sourced from the battery. This reduces the charge-discharge cycle load on the battery, thus improving its longevity.

実際、Lipoをくっつけた状態でUSBと接続させたら赤色のLEDが点灯して、充電中になった
この状態でももちろん使用可能

Getting Started

https://docs.particle.io/guide/getting-started/start/electron/

USB接続すると充電状態になる
で、充電状態だと小さなほうのLEDが赤く光る

1
2
3
4
ONBOARD POWER MANAGEMENT
The Electron charges its own battery!
If the small red LED is on, the battery is charging
When the LED turns off, the battery is fully charged

基板上のMODEボタンを1回押すと、LEDが緑色に点灯して接続強度を5段階で示してくれる
(緑色の点滅回数で最大5回)

1
2
3
DISPLAY SIGNAL STRENGTH!
Press MODE once quickly when the Electron is breathing cyan
The signal strength (RSSI) will be shown in a 0-5 green blinks, 5 being the strongest

MODEボタンを2回素早く押すと、LEDが白く光って数秒後消灯する(SOFT POWER DOWN モード)
再起動させたい場合は、RESETスイッチを押す
SOFT POWER DOWNモードでの消費電流は約0.13mAである
単純に2000mAhの電池なので、満充電後だと繋ぎっぱなしでも約15384時間は持つ(約640日)
イメージがサイトにあった
https://docs.particle.io/guide/getting-started/modes/electron/#listening-mode

1
2
3
4
5
6
SOFT POWER DOWN
Tap MODE twice quickly, then the LED will show white, and then it will turn off in a few seconds
To turn it back on tap RESET once
You can use use soft power down instead of unplugging the battery or power
This uses a deep sleep mode for the Electron, and will still use 0.13mA

OVERVIEWより

particleの月の通信容量は初期設定だと5MBが上限に設定されている(無限にデータを上げないように配慮されている)
ダッシュボードで容量を変更することもできる(最初は練習がてらなので、不安なら上限を落としておいたほうが良いかもしれない)
変更は Dashboardのbillingタブを開いて、estimated costの横にある「・・・」をクリックすると出てきます
https://dashboard.particle.io/user/billing

参考画像

1
2
3
4
5
6
7
8
9
10
11
OVERVIEW
Each SIM card will be billed a base rate which includes 1 MB of data
The base rate covers you up to 1.0MB, additional MB are billed at a cheaper rate than the base
We bill your base rate at beginning of a period, additional MB at the end, so you'll often see both
Base and additional MB rates are based on your country and Zone
You can set a data limit for each SIM. It defaults to 5MB on new SIMs, but you can change it in the Dashboard
Data limits are soft maximums; we only charge you for the number of MB used, rounded up, and we'll cut off usage as quickly as we have updated metering from your carrier
If a SIM goes over the limit, it'll be paused and won't be able to use more data until the beginning of the next period or you raise the data limit
You can use the Dashboard to manage SIMs, billing, and see data usage
See the full Electron Billing Guide

iphone / Androidアプリの使い方

https://docs.particle.io/guide/getting-started/tinker/electron/

ピンの名前部分をタップすることで配線を設定できる
解除する場合はピンを長押しする

1
To begin, tap any of the pins. A menu will pop up showing the functions that pin has available, tap a function name to select the pin functionality. You can reset the pin function by long-pressing it. Each pin can have up to four possible functions:

最大の電圧は3.3Vなので注意

1
2
3
4
5
6
7
digitalWrite: Sets the pin to HIGH or LOW, which either connects it to 3.3V (the maximum voltage of the system) or to GND (ground). Pin D7 is connected to an on-board LED; if you set pin D7 to HIGH, the LED will turn on, and if you set it to LOW, it will turn off.
analogWrite: Sets the pin to a value between 0 and 255, where 0 is the same as LOW and 255 is the same as HIGH. This is sort of like sending a voltage between 0 and 3.3V, but since this is a digital system, it uses a mechanism called Pulse Width Modulation, or PWM. You could use analogWrite to dim an LED, as an example.
digitalRead: This will read the digital value of a pin, which can be read as either HIGH or LOW. If you were to connect the pin to 3.3V, it would read HIGH; if you connect it to GND, it would read LOW. Anywhere in between, it'll probably read whichever one it's closer to, but it gets dicey in the middle.
analogRead: This will read the analog value of a pin, which is a value from 0 to 4095, where 0 is LOW (GND) and 4095 is HIGH (3.3V). All of the analog pins (A0 to A7) can handle this. analogRead is great for reading data from sensors.

間違っても5Vなどを入力しないこと
(最初のチュートリアルではあまりそんなことは無さそうです)

firmwareの書き込み方

USB経由で

https://docs.particle.io/guide/tools-and-features/cli/electron/#flashing-over-serial-for-the-electron
まずは、マシンとUSBでElectronと接続しておく

1.
Electronをlistening modeにしておく
Modeボタンを3秒間押しっぱなしにする。LEDが青色に点滅する
https://docs.particle.io/guide/getting-started/modes/electron/#listening-mode

2.
particle cli をnpmでインストールしておく(要node.js)
インストールしている場合はこの手順は不要
https://docs.particle.io/guide/tools-and-features/cli/electron/#installing

$ particle login
で、自分のparticleと連携できるようにしておく

さらに、dfu-utilとopensslをインストールしておく
http://community.particle.io/t/tutorial-particle-cli-on-mac-osx-26-sep-2015/5225

要 rubyおよびHomebrew(HomebrewをインストールするのにRubyが、dfu-utilをインストールするのにHomebrewが必要)
$ brew install dfu-util

opensslは以下のようにインストールする
参考
http://qiita.com/Chrowa3/items/b04e772be959cdda9ac3

  1. particle web IDEのコードをコンパイルして、firmwareをインストールしておく
    「< >」みたいなマークをクリックすると、REMOVE APP とか CREATE NEW APP とかのボタンがあるサイドテーブルが出てくるので
    そこのクラウドボタン(雲のマーク)をクリックすると、コンパイル後 firmware.bin のインストールが始まるので、自分のパソコンの適当なディレクトリに保存しておく

4.
firmware.binを保存したディレクトリまで(Macの場合はterminalで)移動して、下記のコマンドを実行する
$ particle flash –serial firmware.bin

1
2
! PROTIP: Hold the SETUP button on your device until it blinks blue!
? Press ENTER when your device is blinking BLUE

と出てくる。「今からファームウェア書き込むけどちゃんとリスニングモードになってる?OKだったらENTERキーを押してね!」
って意味なのでENTER キーを押す

これで書き込みが出来る…はずだが、できない・・・

— 2016年3月25日追記
とりあえずフォーラムで同じ現象が起きてて質問してる人がいたのでそれで解決した
https://community.particle.io/t/solved-can-upgrade-electron-ota-but-not-from-cli/20209

解決1. DFU Modeで書き込みを行う

まずは試しにDFU経由での書き込みを行ってみる

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ particle flash --usb firmware.bin
running dfu-util -l
!!! I was unable to detect any devices in DFU mode...
> Your device will blink yellow when in DFU mode.
> If your device is not blinking yellow, please:
1) Press and hold both the RESET/RST and MODE/SETUP buttons simultaneously.
2) Release only the RESET/RST button while continuing to hold the MODE/SETUP button.
3) Release the MODE/SETUP button once the device begins to blink yellow.
Error writing firmware...No DFU device found

DFU Modeになってないので書き込みできませんよ、みたいなのが出てくるので
これにならってDFU Modeに以降する

RESETボタンとMODEボタンを同時押しすると、LEDが消灯する

RESETボタンだけ離すと、一旦LEDが紫色に点滅した後、黄色に点滅する

黄色に点滅したら、MODEボタンを離す

これでDFU Modeに移行するので、後は書き込みコマンドを実行する

1
2
3
4
$ particle flash --usb firmware.bin
...
Flash success!

最後に Flash seccess!と出れば成功!
なんかよくわからないけどParticle側のバグかなんかなのかな・・・しばらくはこの方法でしのごう

over the air(OTA), インターネット経由で

Particle IDEを開いた状態でイナズママークみたいなやつ(Flash)をクリックすると出来ます
注意点としては、通信に数KBかかるので、データ量をコントロールしたいならUSB経由のほうがいいみたいです

以上ひとまず現状ここまで


このエントリーをはてなブックマークに追加

shellスクリプトについて調べてみた(初心者)


このエントリーをはてなブックマークに追加

シェルスクリプト

シェルスクリプトとかシェルコマンドというのは、要するには「黒い画面」に対してコマンドを実行するやつ

例えばMacだとターミナル、Linuxだとコンソール画面
のことになるのかな
(UNIXシェルって書いてあるんで、windowsだとどうなるんだろ???)

シェルコマンド

シェルコマンドは、自分で一行ずつ実行するコマンドで、例えば

$ cd ~/

と打てばルートディレクトリに移動するし

$ mkdir hogehoge

とすれば、hogehogeというディレクトリ(いわゆるフォルダ)が作成される

シェルスクリプト

シェルスクリプトというのは、このコマンドをまとめてファイルにしたものです

まずスクリプトとは、

スクリプトとは、メモ帳などのテキスト エディタで作成し、特定のファイル拡張子を付けて保存したプレーン テキスト ファイルです。
(引用: https://technet.microsoft.com/ja-jp/scriptcenter/ff576118.aspx )

とありますし、いわゆるファイルのことです

例えばbashスクリプトで、hogehogeディレクトリを作成してさらに ls コマンドで現在のディレクトリ内容を表示させるようにしたい場合は

shelltest.sh

1
2
3
4
#!/bin/bash
mkdir hogehoge
ls

というファイルを作成して、下記chmodコマンドで実行権限を付与した後

1
$ chmod +x shelltest.sh

コマンドラインで実行してやると結果が表示される

1
2
3
$ ./test.sh
hogehoge test.sh
$

のようになるやつである
これも立派なシェルスクリプトである(自分もまだよくわかってないけど)

こういうのを、foreachやifを使って制御したスクリプトを書くことで
時間短縮にもっていけたりするので慣れると便利です

例えば、RubyやPythonなど(に限らないですが)の環境構築を行う場合に
インストールしていくものが多いので、コマンドラインで手打ちしていくと
時間もかかるし間違える場合もあったりしますが
シェルスクリプトを準備しておくと、自動化できてとても楽です
(パッチ処理っていうのかな)

sh?bash?zsh?

元来シェルはshという1種類しかなかったとのこと
http://itref.fc2web.com/unix/shell.html

しかしそこはプログラミング言語と同じで、色々な機能をもたせた亜種が登場したみたいです

初心者はどのシェルを使えばよいのか?

自分はRubyやPython、さらにRaspberryPiを良く使うのですが、よく見かけるのは
bashが多い気がします
また、Macの標準ログインシェルはbashみたい
http://blog.tokoyax.com/entry/zsh/bash-to-zsh

だから記事もbashが多いのか

設定も.bash_profileに設定しているのが多い気がします
日本語だと検索して出てくる記事もbash_profileが多いので
最初慣れない内は、bashを利用して、設定も.bash_profileに記載していくのがいいんじゃないでしょうか(という感想)
pythonの記事だとzshのものもちょくちょくみかけます

どうも調べてみると、zshは玄人向けでとても機能が豊富なシェルみたいです
ヾ(o゚ω゚o)ノ゙bashからzshに移行して2014年を迎えよう![ログインシェル]
なぜzshを使うのか

.bash_profile? .bashrc?

bashを使う場合
先ほど設定は.bash_profileに記載すると言いましたが
.bashrcに設定している記事も見かけます

こういうの素人だとわけわからないしコピペしてみてるから動かないし・・・

ひとまず
.bash_profile : ログイン時に一度設定すればいいもの
.bashrc : 起動するたびに設定する必要のあるもの

ということみたいです、下記参照
.bash_profile ? .bashrc ? いろいろあるけどこいつらなにもの?
.bash_profileと.bashrcの違いが覚えられないあなたへの処方箋

普段使用する分には、あまり気にしなくて良いみたい(そもそもそんなに使わない人だと違いが生じない?)


このエントリーをはてなブックマークに追加

CUIだけでラズベリーパイの無線LAN設定を行う


このエントリーをはてなブックマークに追加

RaspberryPiを無線LANでネットに接続するための覚書

以下のサイトを参考に行った
Raspberry Piを無線LAN化
Raspberry Piに無線LANのUSBアダプタをつける

また、Buffaloの無線受信機だと発熱が困るという問題があって(実際自分も使ってみたらかなりの熱を発していた)
以下のPLANEXの無線受信機を用いた。こいつは発熱しなくてよい
PLANEX 無線LAN子機

以下手順を書いておく

ラズベリーパイのCUIコンソール上で

1
$ sudo iwlist wlan0 scan | grep ESSID

で、アクセスポイントの名前を確認

自分のWiFi接続環境のアクセスポイントの名前が出てくるか確認する

1
$ sudo ifdown wlan0

で、wlan0による無線接続を一旦切っておく
こうしないと後々エラーがおきてしまう

1
$ sudo iwconfig wlan0 essid 接続先のSSID key s:接続先のキー

で接続を設定しておく。
例えば、essid(無線LANのアクセスポイントの名前)が myHomeWiFi で
WiFi接続のパスワードが myWiFiPassword だった場合

1
$ sudo iwconfig wlan0 essid myHomeWiFi key s:myWiFiPassword

とコンソールコマンドを打ち込む

1
$ sudo iwconfig wlan0

で確認してみて、例えば

1
2
3
4
wlan0 IEEE 802.11bgn ESSID:"myHomeWiFi"
Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:on

のように、ESSIDのところにアクセスポイントの名前が表示されていたら成功

次に、 /etc/wpa_supplicant/wpa_supplicant.conf
を設定する

以下のページを参考にした
Raspberry Pi + 無線LAN セットアップ

先ほどと同じで例えば
essid(無線LANのアクセスポイントの名前)が myHomeWiFi で
WiFi接続のパスワードが myWiFiPassword だった場合

1
2
3
$ sudo sh -c "wpa_passphrase myHomeWiFi myWiFiPassword >> /etc/wpa\_supplicant/wpa_supplicant.conf"
$ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf

とすることで、wpa_supplicant.confに設定が反映される

この後

1
2
$ sudo ifdown wlan0
$ sudo ifup wlan0

とすると、ネットに繋がる(はず)

つながらない場合は

1
$ sudo dhclient wlan0

とするとIPアドレスがふられてネットに繋がるはず

1
$ ifconfig

で確認できる

次に、固定IPを振っていく

固定IPを振っていないと、毎回IPアドレスが変わってしまうので
ssh接続する時などにちょっと不便になるので設定

1
$ sudo vi /etc/network/interfaces

をすると

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet manual
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
auto wlan1
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

みたいなのが出てくるので

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
#iface wlan0 inet manual
iface wlan0 inet static
address 192.168.1.200
netmask 255.255.255.0
gateway 192.168.1.1
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

と書き換えて保存。
(基本的にnetmaskは 255.255.255.0 と設定してやれば問題なさげ)

addressは、最後の数字だけを好きな数字にしてあげればよい
例えば、今接続されてる無線LANのアドレスの調べ方は
Macだと下記サイトに書かれている方法で確認して
Mac - IPアドレスを確認する方法

使用しているWiFiのIPアドレスが例えば
192.168.1.5

だったとしたら、5のところを好きな数字にしてあげればよいので

address 192.168.1.200

のようにしてやればよい。

gatewayの確認方法はここを参考にして、例えば

192.168.1.0
だとしたら

gateway 192.168.1.0
と設定してやる。

wlan1はまぁ消しても消さなくてもどっちでもよい、使わないので気になるなら消して良いと思われる

後は

1
2
$ sudo ifdown wlan0
$ sudo ifup wlan0

をすればよいはず

うまく設定出来ているかは

1
$ ifconfig

で確認できる


このエントリーをはてなブックマークに追加

Rubyのputsメソッドで学ぶdocumentの読み方(初歩の初歩)

プログラムを学んでいく上でdocumentとか読めないといけないけど
いかんせんどうやって読むのかがまずわからない

なんか作法に則って記述されているんだろうけど、プログラム独特の書き方なので
単純に日本語を読むようにはいかないっぽいので
動きが分かってるメソッドを読み解いてみる

Read More

MacのTerminalでls -Gした時の背景色を変更する

Macのターミナルで $ ls -G した時の色が見にくい場合がある(El Capitanのせいなのかな、Marvericsでは普通だった気がするが)

特に、シリアル通信などで接続デバイスを確かめたい時などに
$ ls -G /dev/tty*とやっていたのだが、下のようにどうにも背景色に茶色のような黄土色のような色がついて見づらい

ので、これを変更してやる
以下のリンク先を参考にした
Terminalで「ls」したら「ls -G」が実行されるようにして、色も設定する。

Read More