paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」の開発者が、プログラミングやITエンジニアの転職などについて書いています。

PythonでRaspberry PiにLTE通信を組み込める「sakura.io」を使ってみた!

f:id:paiza:20190626161110j:plain
どうも、まさとらん(@0310lan)です!

今回は、Raspberry PiにLTE通信を簡単に組み込めるsakura.ioを利用した通信モジュールの使い方についてご紹介します!

月額60円という破格の安さで通信ができることに驚きますが、専用のクラウドサービスを活用したデータのやり取りなども簡単に導入できるのも魅力的です。

初心者でも簡単にIoT開発に取り組めるのでご興味ある方はぜひ参考にしてみてください!

なお、通信制御のプログラムはPythonとJavaScriptで書きますので、paizaラーニングの「Python3入門編」「JavaScript入門編」の学習講座もチェックしてみてください。

sakura.io

f:id:paiza:20190626161326j:plain
 

■モジュールデバイスの組み立て方

sakura.ioの通信モジュールは、ArduinoやRaspberry Piなどに最適化された専用のモジュールデバイス(拡張ボード)が提供されており、これと組み合わせることで簡単に利用できるようになっています。

そこで、今回はRaspberry Piの専用デバイスと通信モジュールを組み合わせて利用してみたいと思います。


まずは、デバイスの取り付けから始めていきましょう!

f:id:paiza:20190626162725j:plain


今回利用するモジュールデバイスは「SCO-RPI-01」で、Raspberry Pi Zero WHと組み合わせてみます。

f:id:paiza:20190626162736j:plain

Raspberry PiはZeroシリーズ以外にも通常のRaspberry Pi2や3も利用可能です。

最初にスペーサーを以下のように設置します。

f:id:paiza:20190626170245j:plain


上から被せるようにしっかりとデバイスを接続します。

f:id:paiza:20190626170257j:plain


最後に付属のネジで止めればOKです。

f:id:paiza:20190626170310j:plain

デバイスの取り付けはこれだけなので簡単です。


今度は、通信モジュールをデバイスに取り付けましょう!

f:id:paiza:20190626170324j:plain


最初にアンテナのケーブルをコネクタへ接続しておきます。

f:id:paiza:20190626170347j:plain


垂直に押し込んでカチッと音がするまでしっかり固定します。

f:id:paiza:20190626170359j:plain


ケーブルとアンテナはネジのように回すだけで接続できるようになっています。

f:id:paiza:20190626170410j:plain


デバイスと通信モジュールのコネクタ同士を接続します。

f:id:paiza:20190626170707j:plain

(※付属の両面テープを適度なサイズにカットして貼り付けると、しっかり固定されます)


これで組み立てはすべて完了です!

f:id:paiza:20190626170736j:plain

特に難しい作業は無いので、初心者の方でも迷うことなく取り付けられると思います。

また、デバイスに搭載されているDIPスイッチを公式ガイドに記載されている通りに設定しておくとよいでしょう。

DIPスイッチの確認|sakura.io公式ガイド

■sakura.ioのセットアップについて

さきほど組み立てた通信モジュールは、sakura.ioのコントロールパネルに登録することですぐに利用できます。

そこで、まずは無料の会員登録を済ませておきましょう。

sakura.io

f:id:paiza:20190626171032j:plain


必要事項の入力が終わったら【会員ID】が発行されます。

f:id:paiza:20190626171042j:plain


発行されたIDとパスワードを利用して、自分のコントロールパネルにアクセスできるようになります。(2段階認証の設定も可)

コントロールパネル

f:id:paiza:20190626171134j:plain


コントロールパネルが表示されたら【プロジェクト追加】ボタンから新規のプロジェクトを作成します。

f:id:paiza:20190626171153j:plain


プロジェクト内にある【詳細】ボタンをクリックします。

f:id:paiza:20190626171206j:plain


【モジュール登録】ボタンから通信モジュールを登録します。

f:id:paiza:20190626171217j:plain


通信モジュールのラベルに記載されているIDとパスワードを入力して登録をおこないます。

f:id:paiza:20190626171321j:plain

これでsakura.ioの通信モジュールとクラウドサービスを利用できるようになりました。


そこで簡単な通信テストをやってみたいので、連携サービスをプロジェクトに追加してみましょう。

f:id:paiza:20190626171344j:plain


連携できるサービスはいくつかあるのですが、今回はリアルタイムに双方向通信ができるWebSocketを使ってみましょう。

サービス一覧から【WebSocket】をクリックするだけで利用できます。

f:id:paiza:20190626171357j:plain

あとはRaspberry Piから通信をおこなってみましょう!

■Raspberry Piからsakura.ioを使う

Raspberry Pi側から通信をおこない、送信したデータをコントロールパネルに出力してみましょう。

まず最初にRaspberry Piを起動させたら、【設定】からI2Cを有効にしておきます。

f:id:paiza:20190626171417j:plain

(※有効にしたら再起動しておきましょう)


次に、通信モジュールを制御するためのPython関連ライブラリをインストールします。ターミナルアプリを起動して以下のコマンドを実行しましょう。

sudo apt install python3 python3-smbus python3-rpi.gpio python3-pip i2c-tools

(※すでにインストール済みの場合は不要です)


そして、sakura.ioの専用ライブラリを追加しておきます。

sudo pip3 install sakuraio pyserial

これで準備は完了です!


試しにsample.pyというファイルを作成して、次のプログラムを書いてみましょう。

from sakuraio.hardware.rpi import SakuraIOSMBus

sakuraio = SakuraIOSMBus()
sakuraio.enqueue_tx(0, 123)
sakuraio.send()

enqueue_tx()の第1引数にチャンネルを設定し、第2引数に好きな値を入力します。今回は、0チャンネルを使い送信する値は123という数値になります。また、チャンネルを変えていくことで複数の値を同時に送信することもできます。


プログラムが作成できたら、sakura.ioのコントロールパネルから連携サービスの設定ボタンをクリックします。

f:id:paiza:20190626172426j:plain


設定画面が表示されて、下段にデータ出力用のエリアが用意されているのが分かります。

f:id:paiza:20190626172654j:plain

このエリアにRaspberry Piから送信したデータが出力されるわけです。


それでは、Raspberry Pi側からさきほど作成したプログラムを実行してみましょう。Raspberry PiのWiFiを切断してsakura.ioの通信モジュールだけにしておくと分かりやすいと思います。

以下のコマンドを実行します。

$ python3 sample.py


コントロールパネルを確認すると、無事にデータが送られていることが分かります!

f:id:paiza:20190626172735j:plain

プログラムした通り、0チャンネルで値は123になっていますね。

これでRaspberry Piはどこに置いていても、LTE通信を利用してデータの送受信ができるようになりました。

■JavaScriptでsakura.ioの通信を受信する

sakura.ioのコントロールパネルからデータを確認できるようになりましたが、実際には自分で用意したWebページなどから確認できたほうが便利ですよね?

そこで、Raspberry Piから送信されたデータを取得して、Webページの画面に表示する簡単なJavaScriptプログラムを作ってみましょう!


今回は、sakura.ioのコントロールパネルからWebSocketを利用しているので、JavaScriptからは以下のような記述でデータを取得できるようになります。

const url = 'wss://api.sakura.io/ws/v1/******************';
const client = new WebSocket(url);

client.onmessage = function(e) {

    const data = JSON.parse(e.data);

    console.log(data);
}


【url】の部分には、sakura.ioのコントロールパネルからWebScoketの編集画面に表示されているURLを設定してください。

f:id:paiza:20190626172928j:plain


ブラウザのコンソールログを確認すると、定期的にデータを取得しているのが分かります。そこで、typeプロパティを見てみましょう!

f:id:paiza:20190626172938j:plain

【keepalive】という値になっているのですが、これは待機中のような意味合いを持っておりRaspberry Pi側から何もデータが送信されていないことになります。


もし、Raspberry Pi側から何らかのデータが送信されたら【channels】という値に変わります。

f:id:paiza:20190626172953j:plain


そこで、さきほどのプログラムを少し変えて何らかのデータが送信されたときにメッセージを出力するようにしてみましょう!

client.onmessage = function(e) {
    const data = JSON.parse(e.data);

    if(data.type === 'channels') {

        // ここにプログラムを記述する

    }
}

IF文でtypeプロパティの値を確認して、【channels】の場合のみ任意のプログラムを実行するようにします。


今回はサンプルとして、Raspberry Piから送信された値だけを取得して画面に表示させてみましょう!

if(data.type === 'channels') {

    const value = data.payload.channels[0].value

    p.innerHTML = '値は、' + value + 'です!';

}


データが送信されると、値が画面に表示されます!

f:id:paiza:20190626173100j:plain

この仕組みを応用すれば、Raspberry Piで取得したセンサーの値などを遠隔でブラウザから確認するようなシステムが簡単に作れるというわけです。

今回のサンプルデモのソースコードは以下のURLから閲覧できますので、ぜひ参考にしてみてください!

sakura.ioサンプルデモのソースコード|GitHub


ちなみに、今回のサンプルではwss://から始まるURLが誰でも閲覧できるため、あくまでプライベートな利用にしておきましょう。もし、本番環境で利用する場合はNode.jsなどを利用して隠密化するようにしてください。

■動画でプログラミングが学べるpaizaラーニング


動画でプログラミングが学べるpaizaラーニングでは、Python、Java、C言語、C#、PHP、Ruby、SQL、JavaScript、HTML/CSSなど、プログラミング初心者でも動画で学べる入門レッスンを公開しています。

Python入門編」「C#入門編」「ITエンジニアの就活準備編」といった人気講座も完全無料となっておりますので、プログラミングを学びたい方・ITエンジニアを目指したい方はぜひごらんください。

■まとめ

今回は、Raspberry Piへ簡単にLTE通信を組み込めるsakura.ioの通信モジュールの基本的な使い方についてご紹介しました。

ちなみに、sakura.ioの課金はポイント消費になっており、1回の通信で1ポイント消費するという分かりやすい仕組みです。月額60円で毎月10,000ポイントが加算されるので、大抵の場合はこの範囲で収まるはずです。(2万ポイントを100円で購入も可)

とにかく安価で簡単にLTE通信を始められるので、これからIoT開発を始めようと考えている方はぜひ挑戦してみてください!





paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

詳しくはこちら

paizaラーニング

そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

詳しくはこちら

paizaのスキルチェック





※このブログで紹介しているキャンペーンやイベント、およびサイト内の情報については、すべて記事公開時の情報となります。閲覧されたタイミングによっては状況が変わっている場合もございますのでご了承ください。

ITプログラマー・エンジニア転職・就活・学習のpaiza

プログラミング入門講座|paizaラーニング

PHP入門編Ruby入門編Python入門編Java入門編JavaScript入門編C言語入門編C#入門編アルゴリズム入門編AI機械学習入門

エンジニアのためのプログラミング転職サイト|paiza転職

プログラミング スキルチェックエンジニア求人一覧

未経験からエンジニアを目指す人の転職サイト|EN:TRY

プログラミング スキルチェックエンジニア未経験可求人一覧

エンジニアを目指す学生の就活サイト|paiza新卒

プログラミング スキルチェックエンジニア求人一覧

ブラウザを開くだけで エディタ、Webサーバ、DB等の開発環境が整う|PaizaCloud