よこやま日記・技術/ガジェット編

@hiroyky IT系エンジニアのまったりブログ

MQTTでServer(Broker)も設置してRaspberry Pi 3とLinux機を通信させてみた。

概要

先日、RaspberryPi3にGroveの温湿度センサを取り付けて温湿度をREST APIとして提供する装置を作ってみました。

hiroyky.hatenablog.com

REST APIでも良いのですが、今回はMQTTというプロトコルを使って温度・湿度を送受信してみました。 MQTTについてはMQTT as a Service sango MQTTについて詳しく知る(外部)が参考になると思います。

目標

  1. Raspberry PIをPublisherとし、温湿度を送信すする。
  2. Linux上に構築したMQTT Server(Broker)を構築する。
  3. 別のLinuxマシンが温湿度を受信する。

RaspberryPiが送信した温湿度を、MQTT Serverを経由して別のLinuxマシンが受信します。

Raspberry Piではじめるおうちハック ~ラズパイとIoTでつくる未来の住まい~

Raspberry Piではじめるおうちハック ~ラズパイとIoTでつくる未来の住まい~

やってみた

MQTT Serverのセットアップ

まっ更なUbuntuにmosquittoをインストール。各OSごとの導入方法はDownloads | Mosquittoで紹介されています。 Ubuntu16.04では標準のパッケージリストにすでに含まれているようです。最新のパッケージが欲しい場合はリポジトリを追加する必要がありそうですが、このまま行きます。

$ sudo apt-get install mosquitto
$ sudo service mosquitto status
sudo: unable to resolve host mqtt-broker
● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
   Loaded: loaded (/etc/init.d/mosquitto; bad; vendor preset: enabled)
   Active: active (running) since Mon 2017-01-02 17:39:05 UTC; 19h ago
・・・

MQTTのおためし

MQTTのSubscriverをセットアップ

こちらもまっ更なUbuntuにインストール。mosquitto_clientsをインストールします。

$ sudo apt-get install mosquitto-clients

mosquitto_subで起動します。とりあえずトピック名はsampleでいきます。

$ mosquitto_sub -d -t sample -h <mosuqittoサーバのアドレス>
Client mosqsub/2193-mqtt-test2 sending CONNECT
Client mosqsub/2193-mqtt-test2 received CONNACK
Client mosqsub/2193-mqtt-test2 sending SUBSCRIBE (Mid: 1, Topic: sample, QoS: 0)
Client mosqsub/2193-mqtt-test2 received SUBACK
Subscribed (mid: 1): 0
Client mosqsub/2193-mqtt-test2 received PUBLISH (d0, q0, r0, m0, 'sample', ... (5 bytes))

MQTTのPublisherをセットアップ

温湿度センサのRaspberryPi3にインストール。mosquitto_clientsをインストールします。

$ sudo apt-get install mosquitto-clients

テキトーなメッセージを送ってみます。

$ mosquitto_pub -d -t sample -m "Hello" -h <mosquittoサーバのアドレス>

Subscriberの方にメッセージのHelloが標準出力されました。

MQTTのPublisherをPythonで実装

pythonインターフェイスの導入

ありがたいことにmosquittoのpythonインターフェイスが用意されているので導入します。

pypi.python.org

$ sudo pip install paho-mqtt

まぁこんな感じかな。grovepiからセンサの値を取得して、そのままMQTTで送信。 コード全体はこちらのリポジトリ このスクリプトをcronあたりで定期実行すればとりあえずOKと。

#!/usr/bin/python2.7
# -*- coding:utf-8 -*-

import paho.mqtt.publish
import grovepi

def parse_args():
・・・

def sensing():
    (temperature, humidity) = grovepi.dht(8, 0)
    return (temperature, humidity)

def publish(hostname, data):
    print data
    paho.mqtt.publish.multiple([data], hostname=hostname)

if __name__ == '__main__':
    args = parse_args()
    (temperature, humidity) = sensing()
    data = {
        'topic': args.topic,
        'payload':str({'temperature':temperature, 'humidity':humidity})
    }
    publish(args.hostname, data)

参考文献

Ubuntuでnvidiaドライバをインストールしたらログインループにorz..

概要

Ubuntu 16.04 LTSにnvidiaドライバをインストールしたらGUIでのログインができなくなってしまいました。 ログイン画面が表示されてパスワードを入力してログインを試みても、一瞬画面が黒くなってまた戻ってしまいます。

似た事例

同じ現象に悩まされた人はいるようです。そして解決方法もマチマチな感じ。

askubuntu.com

askubuntu.com

may46onez.hatenablog.com

www.rokudw.net

ちなみにこちらは動画で症状と解決方法を提案しています。ただ、自分はこの方法を試しても改善しませんでした。しかしながら、コストは大きくなのでとりあえず試してみるのがいいと思います。


How to fix ubuntu login loop [ quick tutorial ]

解決方法

自分の成功した解決策は次のaskubuntuに投稿された1つ目の投稿です。

askubuntu.com

ctrl + alt + f1を押してCUIでログイン。

$ sudo ubuntu-drivers list
$ sudo ubuntu-drivers autoinstall
$ sudo reboot

これでとりえあず良くなりました。

機種

;; (なんかNAVERまとめ みたいなエントリになってしまった。。。)

CUDA C プロフェッショナル プログラミング (impress top gear)

CUDA C プロフェッショナル プログラミング (impress top gear)

CUDA高速GPUプログラミング入門

CUDA高速GPUプログラミング入門

Raspberry Pi3とGrove PiとGrove 温湿度センサで温湿度REST APIを作ってみた。

はじめに

I2C通信用コネクタ同士をケーブルで接続するだけで使えちゃうGroveセンサシリーズの温湿度センサとRaspberry Piを連携してREST APIを作ってみました。Raspberry PiにHTTPでRESTのリクエストするとセンシングしている温湿度を返してくれる仕組みです。

REST APIにすることで一般のPCやサーバからも扱いやすくなり、最近バズってるいわゆるIoTになりますね。

用意したもの

今回、用意したものは以下の通りです。

Raspberry Pi 3 MODEL B

Raspberry Pi 3 MODEL B

GROVE - デジタル温度・湿度センサ

GROVE - デジタル温度・湿度センサ

GrovePi+

GrovePi+

加えて、Raspberry Pi3の電源(USB micro type B, 5V3A出力)とmicro SDカード(16GB class10)です。 また、温湿度センサにはケーブルが属していたので別途購入する必要はありませんでした。

やってみた

前提

Raspberry PiにはRaspbianをインストールし、SSHでログインできる状態であるものとします。

GrovePi+の取り付け

接続するだけです。端のピンに合わせれば良いようです。

こんな感じ。 f:id:hiroyky:20161207003425j:plainf:id:hiroyky:20161207003432j:plain

Raspberry Piのセットアップ

www.dexterindustries.comに沿って進めていきます.

インストール

こちらのリポジトリからクローンしてきます。 github.com

($ sudo apt-get install git)
$ git clone git@github.com:DexterInd/GrovePi.git
$ cd GrovePi/Script
$ sudo sh ./install.sh

しばらく待ってると完了し、再起動します。 f:id:hiroyky:20161207203121p:plain

起動後、不要なパッケージができているかもしれないので、autoremoveしておきます。

$ sudo apt-get autoremove

GrovePi+ 接続確認

次のコマンドを打って04と表示されればOKです。

 $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

温湿度センサの接続

温度センサを接続します.コネクタがきちんとしているので,向きを間違えることはないです.今回はD8ポートに接続します. f:id:hiroyky:20161211214329j:plainf:id:hiroyky:20161211214333j:plain

Pythonから温湿度取得

PythonからGroveのデバイスを操作するために次のライブラリが提供されています. www.dexterindustries.com

ページの最初にある動画をみると雰囲気がつかみやすいと思います.


Write Your First GrovePi Program in Python

つまり,grovepiの提供するAPIを使用していますね.

import grovepi

github.com

ただgrovepiライブラリがインストールされていなかったためインストールします. (grovepi自体は先ほどクローンしたGrovePiのGrovePi/Software/Python/にあります.)

$ cd GrovePi/Software/Python
$ sudo python setup.py install

以下のようにして気温と湿度を取得します.今回はD8ポートにセンサを接続しているのでdht関数の引数に8を与えています.

Python 2.7.9 (default, Sep 17 2016, 20:26:04)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import grovepi
>>> grovepi.dht(8, 0)
[24.0, 37.0]

OK! (小数点一桁目まで表示されてますが測定精度はどうなんってたっけ??とりあえず今回はスルー)

Webサーバ化

温湿度が取れることは分かったので,Webサーバ化してREST APIとして取得できるようにします. 今回は,WebフレームワークにFlaskを使用します.

インストール

$ sudo pip install Flask

実装

まあ,こんな感じですね./V1/enviromentにエントリポイントを設けて,温度と湿度をJSONでレスポンスします.

import flask
import grovepi

app = flask.Flask('sensor_api')

@app.route('/V1/enviroment')
def enviroment_handler():
    (temperature, humidity) = grovepi.dht(8, 0)
    return flask.jsonify(temperature=temperature, humidity=humidity)

if __name__ == '__main__':
    app.run()`

github.com

サーバを起動してみましょう.

$ export FLASK_APP=app.py # pythonスクリプトを指定
$ flask run --host=0.0.0.0

で,curlなりWebブラウザなどからアクセス

curl http://localhost:5000/V1/enviroment
{
  "humidity": 44.0,
  "temperature": 23.0
}

OK!

まとめ

  • Raspberry PiとGrovePiを接続して,ソフトウェアのセットアップしました.
  • Grove温湿度センサを接続して値を取得しました.
  • Flaskを使ってWeb APIを作成しました.

参考文献など

8からアップグレードしたWindows10は直接クリーンインストールできるのか?

はじめに

Windows8 proからアップグレードしたWindows 10があります。このWindows10を削除して、新しいPCにWindows10をクリーンインストールする必要ができたので、できるか試してみました。

Windows10をインストールするのにWindows8をインストールしてからアップグレードするのは面倒でイヤなので直接Windows10をクリーンインストールしたいのです。しかも自分の場合、Windows8自体がXPからのアップグレード版なので最悪

  1. WindowsXPのインストール(いまさら)
  2. Windows8 proにアップグレード
  3. Windows10にアップグレード

f:id:hiroyky:20161210212943j:plain

なんてことをする必要になったら大変です。Windows10は一度インストールされるとその環境をマイクロソフト社が覚えてくれて2度目からはアクティベーションがかなり簡略化されるという噂も聞いたことがありますが、今回は全く異なったPCです。(OSも未インストール)

最初に結論

結論から言うと、できました。無事アクティベーションされました!

やり方の確認

一応手順を簡単ながら書いておきます。

PCにWindows10のインストーラとするUSBメモリを挿入します。 f:id:hiroyky:20161210213258j:plain

Windows 10からMediaCreationTool.exeをダウンロードして実行します。

f:id:hiroyky:20161210213742p:plain で書き込んで。。

USBメモリをインストールするPCにつないで、USBからブートします。 f:id:hiroyky:20161210213347j:plain

プロダクトキーが求められたときに、Windows8のを入力します。 f:id:hiroyky:20161210213400j:plain

f:id:hiroyky:20161210213354j:plain

これで、インストール&アクティベーションが無事にできました。

留意点

以前Windows10までアップグレードしたことがあるプロダクトキーで実施しています。 正規のWindows10ライセンスですので、むしろできなかったらメーカーに問い合わせるレベルです笑

あくまでも自分ができたよ、というお話です。

FF15が届いた

出勤前に届いた!

朝,出勤直前にヨドバシカメラの配達員がさっそうと現れて届けてくれました.

キタ━━━━(゚∀゚)━━━━!! FINAL FANTASY XV

制作期間約10年の集大成! いやコンピュータソフトに10年かけるってありえないでしょっと思いつつも楽しみにしてました.いまやってるテイルズオブエクシリアを終えるまでガマンしてプレイするぞ〜.

f:id:hiroyky:20161130033700j:plain

ファイナルファンタジー XV 初回生産特典 武器「正宗/FINAL FANTASY XVオリジナルモデル」アイテムコード同梱 - PS4

音楽

それはともかくFF15は音楽もノリノリで楽しんでいます.今回は下村陽子さんが作曲を担当されたようですね.PVを見ただけでもいいなぁって思ってたのですが,このオーケストラ動画を見て感無量でした!


Final Fantasy XV Live at Abbey Road Studios

オリジナルサウンドトラックも予約済みです!

とりあえず

今プレイしているRPG(テイルズオブエクシリア)を終えるまでガマンしてから満喫します.音楽は,サントラが届いたら仕事中に聞こうと思います.

はてなブログ始めました

はてなブログ新設

物凄〜く今更感あるのですが,はてなブログ始めました.Google Bloggerからのお引っ越しになります.技術系やIT系のお話がメインになると思いますが,程よく書いていこうかと思います.

今までは,いろんなことを全てBloggerに書いていましたが,日常のちょっとしたこと小ネタや, 趣味, 日記,”やってみた”などははてなブログに書いて,まとまった技術的な内容はQiitaに書いていこうと思います.

自分のリンク

今後ともよろしくお願いします.