Linino Oneをはじめよう！

# Linino Oneをはじめよう！
最近、Linino OneというArduino Yún互換機を買って遊んでいます。結構おもしろいデバイスですが、情報が少なくて、ちょっと残念です。

というわけで、本記事ではLinino Oneをはじめようかなって思ってもらうため、基本的なことや何ができるのかを簡単に紹介します。

なお、この記事は[Arduino Advent Calender 2015](http://qiita.com/advent-calendar/2015/arduino)の１２日目になります。

## Linino Oneって何？

Linino Oneとは、一言で言えばArduino Yúnの小型版。

Arduino Yún同様、ATmega32u4がArduinoとして動き、Atheros AR9331上でLinuxが動く、無線LAN機能を搭載するArduinoボードです。

![Linino One](http://akizukidenshi.com/img/goods/C/M-08902.jpg)

### Yúnとの違い
Linino Oneは、小型化のためにArduino Yúnから下記の部品が削られています。

- 有線LANコネクタ
- USB type Aコネクタ（USB HOST機能）
- MicroSDカードスロット

ただし、[dogRJ45 dogUSB](http://akizukidenshi.com/catalog/g/gM-08903/)なるものがあって、後から機能追加することは可能です。

![dogRJ45 dogUSB](http://akizukidenshi.com/img/goods/C/M-08903.jpg)

### なぜ、Yún使わないの？
日本で発売されているArduinoは、Arduino.orgの製品です。そのため、Arduinoシリーズの入手性はArduino.orgの動きに左右されています。

詳しくは、[Arduinoの内部分裂について](http://mag.switch-science.com/2015/04/07/arduino-v-arduino/)をどうぞ。

>日本国内では、Arduino商標はArduino SRLによって商標登録されています。そのため、Arduino LLCからArduinoという商標の表示された商品を輸入して日本国内で販売すると、商標法違反になってしまいます。したがって、現時点では、当社はArduino LLCの商品を販売する事はできません。もともとArduino SRL以外が製造販売してきた、Nano、Pro、Pro Mini、Fio、Micro、Arduino at Heartプログラムで作られた製品についてはどうなるのか、商標権者と話し合いを進めていきます。

そんなArduinoのいざこざを避け、好きなボード、好きなIDEを使う方法としては、Arduino.orgじゃないボードを選定するのも一つの方法ではないかと勝手に思ってます。

### Yún Miniと何が違うの？
たぶん、Arduino.orgのクレジットがついて、色が違うぐらいじゃないでしょうか？
（間違ってたら、すみません）

![Arduino Yún Mini](http://akizukidenshi.com/img/goods/C/M-09676.JPG)

### 高いんじゃないの？
Raspberry Piに比べると、高いです！
ただ、Arduino Yúnに比べると、機能を制限してる分、安くなってます。
(価格だけをみると、Yún Miniはメリットがほとんど感じられない...）

|        デバイス       |  秋月 | Switch-Science |
|:---------------------:|:-----:|:--------------:|
| Arduino Yun           | 8,950 |      9,900     |
| Arduino Yun Mini      | 8,500 |      9,900     |
| Linino One            | 7,800 |      8,424     |
| Raspberry Pi2 Model B | 5,400 |      5,940     |

なお、全体的にSwitch Scienceが高い印象を受けそうですが、上記のデバイスなら一品からでも送料無料になります。一方、秋月の場合には、問答無用で送料500円が上乗せされるので、その他の部品など合わせ買いをしたほうが割安感が得られます。

## Linino Oneの基本
### ３つのボタン
Linino Oneには、３つの小さなボタンがある。（小さくて押しにくい！）

下図の上から順番に、下記のような内容になっている。

1. MCU(Arduino) Reset
2. Linino(Linux) Reset
3. Wifi Reset

![linino_button.png](https://qiita-image-store.s3.amazonaws.com/0/10770/5acf6e6c-ed67-2c3b-4295-40eb9e3e56db.png "linino_button.png")

### 基板上のLED
Linino Oneには、基板上に５つのLEDが実装されている。

下図の上から順番に、下記のような内容となっている。

1. WAN
2. POWER Indicator
3. Wifi Indicator
4. USB
5. PIN D13

![Linino_LED.png](https://qiita-image-store.s3.amazonaws.com/0/10770/6436b163-7065-f789-10b3-ce21e366a001.png "Linino_LED.png")

### PCとの接続（ドライバ）

- Mac:不要
- Windows:[ここ](http://www.linino.org/product/linino-one/)からダウンロード

### Arduino IDEの設定
Arduino IDEでは、プログラムの書き込み前に、マイコンボードをArduino Yúnに設定しておけばOK。

![マイコンボード___Arduino_Yún__と_ツール.png](https://qiita-image-store.s3.amazonaws.com/0/10770/3297029f-a6da-a4a3-fac3-123e1f48694b.png "マイコンボード___Arduino_Yún__と_ツール.png")

### Wifiなどの設定
電源をつなぐとWiFi経由で「Linino-B4218AXXXXX」というアクセスポイントとして見える。
（末尾のXXXXXは個体番号が入るので個体ごとに違う）。

![スクリーンショット_2015_12_09_23_32.png](https://qiita-image-store.s3.amazonaws.com/0/10770/0a20df5f-6a3a-297d-01a1-a05875afbd75.png "スクリーンショット_2015_12_09_23_32.png")

アクセスポイントに接続して、ブラウザで[http://192.168.240.1](http://192.168.240.1)に接続すれば、設定画面に繋がる。

#### ログイン画面

初期パスワードは、取扱説明書にも記載されている。

![site1.png](https://qiita-image-store.s3.amazonaws.com/0/10770/c6a456b0-b5be-ef4b-3b56-ce37ec7e473e.png "site1.png")

#### 確認画面
ネットワークやシステムの情報が確認できます。

![site2.png](https://qiita-image-store.s3.amazonaws.com/0/10770/c4c2dc97-55dc-8fe8-4e21-08acab845268.png "site2.png")


#### 設定画面

ボード名[^1]、ログインパスワードを任意で変更するほか、Linino Oneが接続するWifiを設定する必要がある。

[^1]: ボード名は接続先URLに影響する。

![site3.png](https://qiita-image-store.s3.amazonaws.com/0/10770/b5463c78-c3da-1d76-ad07-444963c1e439.png "site3.png")

- 設定の書き込み画面
設定が終了すると、[http://linino.local/cgi-bin/luci/webpanel/homepage](http://linino.local/cgi-bin/luci/webpanel/homepage)といったURL[^2]で接続できる。

[^2]: linino.localの部分は、設定したボード名に依存する。

![site4.png](https://qiita-image-store.s3.amazonaws.com/0/10770/58a436a5-5da5-f66a-250f-6cb21854dd36.png "site4.png")

## Arduinoとしての機能
### UnoとLeonardoの違い
Linino OneのArduinoは、Unoではなく、Leonardoです。
Unoとの大きな違いは、シリアルポートを開いてもリセットされない点があります。

>Arduino Unoとは異なり、Leonardoはパソコンでシリアルポートを開いてもスケッチをリスタートしません。つまり、ボートによって既にパソコンに送信されたシリアルデータ、例えばsetup()で送信された多くのデータを見ることはできません。この変更は、Serial print()、println()あるいはwrite()といったステートメントをsetup()で使用してもシリアルモニタを開いても読むことができないということを意味します。
[Arduino Leonardoへのガイド](http://trac.switch-science.com/wiki/Guide/ArduinoLeonardo)

### I/Oピン
Linino One（Arduino Yún）は、下記のような制約がある。

- D0・D1：（AR9331 との Serial1 用に接続されている）
- D2・D3：外部割り込みとI2Cに使用！
- D7：AR9331 の ハンドシェイク用(使わないほうがよい）

中でも、D2・D3は、外部割り込みとI2Cを兼用しているので、不便です。
そこで、外部割り込みを拡張・変更する[EnableInterrupt](https://github.com/GreyGnome/EnableInterrupt)ライブラリなるものがあるようです。
詳しくは、[こちら](http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#OpenWrt-yun_.E3.81.AE.E3.82.A2.E3.83.83.E3.83.97.E3.83.87.E3.83.BC.E3.83.88)を参考ください。

## Arduino Yúnとしての機能
Linino One特有の機能は、Arduinoと組み込み用Linux(Linino)が連携している点にある。

![BridgeInShort.png](https://qiita-image-store.s3.amazonaws.com/0/10770/d95cfaaa-b3b8-4008-bad1-c027333d03eb.png "BridgeInShort.png")

両者が連携しているため、例えばArduinoのスケッチからLinuxコマンドや独自で作成したpythonなどのスクリプトを実行することが可能です。また、Linux側からArduinoへのアクセスも用意してあるところは、素晴らしいです。

以下、Arduino Yúnが連携しているWebサービスになります。

### Temboo
Arduino Yúnのサンプルには、[Temboo](https://temboo.com/arduino)が組み込まれており、手軽にIoTサービスを試すことが可能です。

>TembooはIoT向けのプラットフォームであり、クラウドサービスへの接続するため、Arduino Yúnに100以上のAPIを提供しています。TembooのChoreos(連携処理)で、Arduino Yúnがクラウドサービス（Dropbox、Facebook、Google、Twitterなど）と簡単に連携できます。
[arduino-yunをgoogle-docsやtwitterと連携してみた](http://recruit.gmo.jp/engineer/jisedai/blog/%E3%80%90%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C%E3%80%91arduino-yun%E3%82%92google-docs%E3%82%84twitter%E3%81%A8%E9%80%A3%E6%90%BA%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/)

### AWS IoT
先日発表されたAWS IoTは、Linux側のスクリプトとの連携機能をうまく活用して、サービスにデータをアップデートしているようです。

下記のサイトを参考にすると、Lambdaとの連動は比較的簡単に出来ます。

- [LambdaからIoT経由でArduino Yúnへ（前編）](http://mag.switch-science.com/2015/11/02/aws-s3-lambda-iot-yun/)
- [LambdaからIoT経由でArduino Yúnへ（後編）](http://mag.switch-science.com/2015/11/02/s3-lambda-iot-yun-continued/)

### IFTTT Maker Channel
下記Qiitaのとおり、cURLコマンドをたたけば、IFTTTのMaker Channelを使うのは、結構簡単です。

- [IFTTTを用いてArduinoからツイートする](http://qiita.com/kassy_kz/items/ebeda9bcda444cf401a0)

### ニフティクラウド mobile backend
自分はまだ試していませんが、[Arduino YÚNから直接mBaaSにデータをアップロードする](http://blog.mb.cloud.nifty.com/?p=3728)ことができるようです。

### REST機能
REST機能とは、URLにアクセスすることでArdunoのピンを簡単に制御できる機能です。

詳しくは、[Arduino Yúnを使ってみよう (2) YúnをPCから操作する](http://mag.switch-science.com/2015/03/10/try-arduino-yun-2/)を参考ください。

### その他
下記のようなサービスも対応している。

- [Blynk](http://www.blynk.cc)
- [AT&T M2X](https://m2x.att.com)

## 困ったとき
### IPアドレスがわからない場合
Macの場合には、ボード名の解決ができるため、ボード名で接続ができるが、Windowsではうまく名前の解決ができない！

安心してください。

実は、Arduino IDEには、IPアドレスを確認するためのサンプルスケッチ```WifiStatus```が用意されていますよ。

![Bridge_と_スケッチの例_と_ファイル.png](https://qiita-image-store.s3.amazonaws.com/0/10770/0347ddab-44c7-c1f2-3710-72c32f090722.png "Bridge_と_スケッチの例_と_ファイル.png")

スケッチを書き込んだら、シリアルコンソールを立ち上げるとIPアドレスが確認できる。

![_dev_cu_usbmodem411__Arduino_Yún_.png](https://qiita-image-store.s3.amazonaws.com/0/10770/e009e0d3-4747-1dc4-b652-1be06cb59d3c.png "_dev_cu_usbmodem411__Arduino_Yún_.png")

### Wifiの設定をリセットしたい場合
Wifiの設定を変更したけど、どうやればいいのかわからない！

安心してください。

Wifiの設定は、Wifiリセットボタンを押し続けると、５分ぐらいでリセットされますよ。

### シリアルポートが見えなくなったら
あるプログラムを書き込んだら、シリアルポートがいなくなった。デバイスを抜き差ししても、シリアルポートが現れない！

安心してください。

こういうときは、何も記述していないダミースケッチをwifi経由で書き込むと、シリアルポートが復活しますよ。

### ハードリセット
なんだか、Linux側のコマンドをいろいろ弄って、よく分からなくなった！

安心してください。

下記のような手順で、ハードリセットが出来ますよ。（[参考：Linino forum](http://www.linino.org/forums/topic/linino-wont-start-up-its-network/)）

1. MCUリセット＋Lininoリセットボタンを同時に押す
2. Lininoリセットを5秒後にリリースする
3. MCUリセットを30後にリリースする

## 最後に
Linino One（Arduino Yún）は、価格が高いので敬遠していましがちですが、実際に触ってみると、価格面のデメリットを忘れるぐらいよく考え抜かれたデバイスだと思います。
（WifiStatusがサンプルに用意されている時点で、すばらしいです。）

あと、SeeedStudioから[LinkIt Smart 7688 Duo](http://www.seeedstudio.com/depot/LinkIt-Smart-7688-Duo-p-2574.html)なるボードも出てきました。このボード$15ということなので、技適通してもかなり安価に提供されるんじゃないでしょうか？
楽しみです！