head

2015年10月30日金曜日

MQTT アプリ実装編、paho-mqtt (python版)


以前の、センサ値のweb版リアルタイム表示に加えて
過去データの表示方法も検討したいと思います。

paho-JS版のリアルタイム表示は、便利なのですが。
過去データを表示するには、別途実装が必要かと思います。

今回は、
Subscribe 側サーバに、paho-python ライブラリを使用し、
mysql データベースに書きこみます。
サーバ環境は、前回 LAN上に構築した mosquitto(websockets版)

IoTデバイス側は、以前の wiz550io版
約2秒間隔で、センサ値を送信

# 準備 ライブラリ等
paho-mqtt python
sudo pip install --upgrade paho-mqtt

Mysql ライブラリ
sudo apt-get install python-mysqldb

# db作成し、登録用のテーブル作成しておきます。

# Sub側の処理
paho-mqtt (python) の sub.py を拡張して、実装していきます

pythonの常駐プロセスを起動しておき、pubデータを監視

Git:
https://github.com/kuc-arc-f/python-mqtt-sub-2

起動方法:
python sub2db.py

# pub/subのルール等
今回は下記としてます。
pub: デバイスに対して、1個の  Topicを割り当てる
例)
item/sensor-1 : 1台目
item/sensor-2 : 2台目
item/sensor-3 : 3台目

sub: topic範囲を指定する(対象のデバイス分)
item/#

*)web側のsubは、1台毎 topic(1 topic)を指定する。

# db登録
https://github.com/kuc-arc-f/python-mqtt-sub-2/blob/master/python-mqtt-sub-2/sub2db.py

on_message (イベントハンドラぽい)に、db処理を追加。
=======================
def on_message(client, userdata, msg):
clsSen= com_sensor.sensorClass()
print("on_message:topic=" + msg.topic+" ,pay="+str(msg.payload))
clsSen.saveSensor( msg.topic, str(msg.payload))
=======================

# テスト
python側常駐プロセスがsubすると、DB登録されます。

*) phpmyadmin で確認。
*) 別のクライアントIDで、前回のwebリアルタイム表示も可能(ログ)


登録側のデバイス( 参考 )



#まとめ
*) MQTT経由でDB登録まで完了できたので、表示系の実装はカンタンかと思います。
*) 短い周期のデータ書込みで、接続デバイス数が多ければ
  DB負荷も重たいので、工夫が必要かと思います。
  pubする間隔と長くすると、リアルタイム性が低くなるため注意も必要
*) クラウド側に設定すると、同様に過去データ取得/リアルタイム表示可能

# 関連の記事
mqtt 準備
http://knaka0209.blogspot.jp/2015/10/mqtt-1.html

wiz550 デバイス
http://knaka0209.blogspot.jp/2015/10/wiz550io-2.html

mosquitto(websockets版)
http://knaka0209.blogspot.jp/2015/10/mqtt-3.html

# 開発者向けのまとめ記事
http://knaka0209.blogspot.jp/2015/04/agri.html



2015年10月29日木曜日

Install mosquitto (over websockets) on Raspberry PI 2


以前に、準備編でapt-getでの mosquitto 関連のインストール記事を記載しましたが
今回は、LAN上に自前でMQTT サーバ (websocket対応)環境を構築したいと思います。
対応方法を調査しましたが 結構面倒な為。メモです
ソース取得して、コンパイル必要です。

OS: Linux (debian wheezy), Raspberry PI 2

[MQTT]
mosquitto 1.4.2
port MQTT: 1883
port Websocket : 8080

*) 既存のmosquittoを削除後、インストールしています。
*) 試しにLAN上にインストールする為、MQTT アカウントの認証を省略しています。

# 1)関連パッケージ
$ sudo apt-get update
$ sudo apt-get install build-essential python quilt devscripts python-setuptools python3
$ sudo apt-get install libssl-dev
$ sudo apt-get install cmake
$ sudo apt-get install libc-ares-dev
$ sudo apt-get install uuid-dev
$ sudo apt-get install daemon

# 2) libwebsockets
$ wget http://git.libwebsockets.org/cgi-bin/cgit/libwebsockets/snapshot/libwebsockets-1.4-chrome43-firefox-36.tar.gz
$ tar zxvf libwebsockets-1.4-chrome43-firefox-36.tar.gz
$ cd libwebsockets-1.4-chrome43-firefox-36
$ mkdir build
$ cd build
$ cmake ..
$ sudo make install
$ sudo ldconfig
$ cd

# 3) mosquitto 1.4.2
$ wget http://mosquitto.org/files/source/mosquitto-1.4.2.tar.gz
$ tar zxvf mosquitto-1.4.2.tar.gz
$ cd mosquitto-1.4.2

config.mk 修正します。
WITH_WEBSOCKETS:=no
[修正後]
WITH_WEBSOCKETS:=yes
$ make

===update 2015-10-29 =====
$ sudo make install
$ sudo ldconfig

# 4) mosquitto.conf ,setting
ホームに、mosquitto.conf を作成 (下記の内容)

######
pi@raspberrypi:~$ more mosquitto.conf
listener 1883

listener 8080 127.0.0.1
protocol websockets
######

# 5) rebootします。

# 6) mosquitto起動。
pi@raspberrypi:~/work/mosquitto-1.4.2$ pwd

/home/pi/work/mosquitto-1.4.2

*) 今回は、src フォルダで起動。
src/mosquitto -c ~/mosquitto.conf  -d

mosquitto_sub が動作しない場合がありました。
*)共有ライブラリの設定で解決しました。
===update 2015-10-29 =====
/usr/local/sbin/mosquitto -c ~/mosquitto.conf  -d



*) 起動後は Sub/Pub できました、
ブラウザからのアクセスも可能。(paho-js)

# 参考の記事
http://www.xappsoftware.com/wordpress/2015/05/18/six-steps-to-install-mosquitto-1-4-2-with-websockets-on-debian-wheezy/comment-page-1/

# 関連の記事
http://knaka0209.blogspot.jp/2015/10/mqtt-1.html

# 開発者向けのまとめ記事
http://knaka0209.blogspot.jp/2015/04/agri.html


2015年10月27日火曜日

WIZ550io+ Arduino Pro miniで、MQTT活用

前回のATMega328版と似ていますが
有線LANモジュール[ WIZ550io ]、Arduino Pro mini 3.3V の構成で
IoTデバイス検討したいと思います。


[概要]
前回の ATMega328+有線LAN 構成よりは、高めですが
小型のマイコンボード(Pro mini)との組み合わせとしてます。

テストは、MQTT- arduino EtherNet版のリレー制御
と似ていますが、スイッチ画面はwebで作成し
LEDのON/OFF としています。

[MQTT 構成]
broker : test.mosquitto.org
publish(Pub) : Chrome Android
subscribe(Sub) : IoT device


*) 前回と同様、テスト用の broker(MQTT Server), pahoのJSライブラリ等
を使用。

*) 関連URL/version 等は、執筆時点を記載しています

# 部品
arduino Pro mini 3.3V / 1243 [en]
WIZ550io v1.1 有線LANモジュール/ 1944[en]

降圧 3.3レギュレータ / 100[en]
470 マイクロF コンデンサ
マイクロUSB(メス) / 200[en]
# 配線


[Wiz550io] - [ Pro mini ]
MOSI - D11
MISO - D12
SCLK - D13
SCSn - D10

3V3 - 3V3
GND - GND
D7 に、LED接続

# 準備編
arduino-adk 1.6.5

以前のatmega328 編 と同様の為、詳細は省略します。

W5500 EtherNet
mqtt-arduino
ライブラリの追加が必要

# code
macアドレスは、wiz550 基盤に記載されていたアドレスに
書き換えました。

*) topic は、web側と合わせる事が必要です。
atmega328 編 と同様じの為、詳細は省略します。

# テスト
web画面( chrome Android )から、ON/OFF操作します。

ON 押すと、LED点灯します。
OFF押すと、消灯。

# センサ値のPublish も試してみました。
前回と同じスケッチ
表示: chrome Android
A0 に光センサ追加。



# 参考の記事
arduino-mqtt - lib

paho-mqtt javascript

# 関連の記事
MQTT 活用編。IoT型スイッチ Arduino EtherNet

# 開発者向けのまとめ記事

2015年10月22日木曜日

WIZ550io+ATMega328で IoT製作、MQTTも

有線LANモジュール[ WIZ550io ]、ATMega328P-PU の構成で
低価格なオリジナルのIoTデバイス検討したいと思います。

[概要]
WIZnet社製W5500を搭載したモジュール。SPI通信
100BaseTXで、性能的には高そうです。
前回の ENC28J60 有線LANよりは、高めですが
他の部品コストを下げて、低価格の構成できればと思います。

と似ていますが、スイッチ画面はwebで作成し
LEDのON/OFF としています。

[MQTT 構成]
broker : test.mosquitto.org
publish(Pub) : Chrome Android 
subscribe(Sub) : IoT device

*) 前回と同様、テスト用の broker(MQTT Server), pahoのJSライブラリ等
を使用。

*) 関連URL/version 等は、執筆時点を記載しています

# 部品
WIZ550io v1.1 有線LANモジュール/ 1944 [en]
atmega328P-PU (ブートローダ書き込み済) / 360 [en]
降圧 3.3レギュレータ / 100[en]
470 マイクロF コンデンサ
マイクロUSB(メス) / 200[en]

# 配線

[WIZ550io] - [atmega328]
MOSI - D11
MISO - D12
SCLK - D13
SCSn - D10

3V3 - 3V3
GND - GND

# 準備
arduino-sdk 1.0.5

# W5500 ライブラリの追加
https://github.com/Wiznet/WIZ_Ethernet_Library
README に従って、ライブラリ追加します。
https://github.com/Wiznet/WIZ_Ethernet_Library/blob/master/README.md

*)上記の追加後、webClient等のサンプルを実行して
正常に通信できる事を確認したほうが、良いかもしれません。

# mqtt ライブラリの追加 (pubsubclient-2.3)
http://knolleary.net/arduino-client-for-mqtt/
[pubsubclient-2.3.zip] が直接インポートできませんでした、
下記の対策行いました。

[pubsubclient] の名前でフォルダ作成しておきます
pubsubclient-2.3.zip 解凍し、
src 内のファイルを上記の [pubsubclient]にcopy
examples を[pubsubclient]にcopy

zip圧縮し、SDK から[Add Library]
([スケッチ]-[ライブラリを使用]-[Add Library])

# atmegaの下記書込みは、前回の記事を参考
http://knaka0209.blogspot.jp/2015/10/ATmega328-1.html

マイコンボード = ATMega328P/ Int.8MHz
書込装置= arduino as ISP

# code
macアドレスは、基盤に記載されていたアドレスに
書き換えました。

スケッチは、前回の MQTT - arduinon EtherNet
と同じ。詳細は省略します。

*) MQTT - topic は、web側と合わせる事が必要です。

# テスト
web画面( chrome Android )から、ON/OFF操作します。
ON 押すと、LED点灯します。
OFF押すと、消灯。


# センサー値のPublish追加しました。( MQTT )
上段はmqtt - Sub版でしたが、
Publish版でセンサー値の送信追加してみました。(約 2秒間隔)
表示版は、前回と同様の paho-JSライブラリで表示(ロギングのみ)
A0 に光センサー追加。


# code : Arduino SDK
topic を、web側とあわせます。

*) web表示側のコードは前回とほぼ同じの為、省略

# web 画面


# ケースも作成してみました。DIY編

加工は側面に穴あけ。だけですが、、
ドリル工具、精密ニッパで穴サイズを調整。

# 材料
プラケース / 100[en]
*) 100均さまで探したケース(ハガキ用らしい)
少し大きめでしたw (基盤に対して)

# 反対側の図
 手作業での穴あけが、ギザギザでいまいち。


# http センサ値の送信も追加しました。
上段での、MQTT 通信に加えて、http 送信機能も追加しました。

# code : arduino SDK
WIZ550io_arduino_http_1.ino

サンプルの webClient を参考に実装しています。
*) sdk :[ファイル]- [スケッチの例] -[EtherNet]-[webClient]
macアドレスは、wiz550io 基盤に記載されたアドレスを入力。


# BaaS に転送して、センサ値の保存

# グラフの描画も


# まとめ
正直、
開発ボード使用して(UNOとか) 開発したほうが はるかに楽です。
抵コスト化等で、複数製作する場合は検討しても良い構成。
MQTT経由のスイッチ応答性は速くて、
使える範囲かと思います。

# 参考の記事
arduino-mqtt - lib

paho-mqtt javascript

# 関連の記事
MQTT 準備編。Arduino EtherNet, paho-MQTT(over WebSocket)
http://knaka0209.blogspot.jp/2015/10/mqtt-1.html

MQTT 活用編。IoT型スイッチ Arduino EtherNet

ATmega328P-PU に、スケッチを書き込む (ARDUINO as ISP)

# 開発者向けのまとめ記事


2015年10月20日火曜日

MQTT 活用編。IoT型スイッチ Arduino EtherNet

[概要]
前回の MQTT準備 の続編となります、
デバイス側からのPublishと逆のパターンで、
デバイス側からSubscribeし、web画面からのPubデータ(スイッチのON/OFF)
を受信
ONの場合、リレー回路をON、LED(12V)を点灯
OFFの場合、リレー回路をOFF、LEDをOFF
クラウド経由で、周辺デバイスの ON/OFFのスイッチ機能を
実装してみます。

[MQTT 構成]
broker : test.mosquitto.org
publish(Pub) : Chrome Android
subscribe(Sub) : IoT device

*) 少し高めの電圧流す為、ご注意下さい。
*) 前回と同様、テスト用の broker(MQTT Server), pahoのJSライブラリ等
を使用。

*) 関連URL/version 等は、執筆時点を記載しています

# 部品
今回は、LED側の電源を
DCアダプタ (19V 程度)を使用。
降圧レギュレータで、12Vまで下げて電源供給しています。
*)入出力コンデンサは、レギュレータに付属のもの
*) 12V出力側周辺に、ヒューズ等追加したほうが
良さそうですが、短時間のテストの為 直結しています。

リレーモジュール 5V
LED 12V / 80[en]
降圧レギュレータ 12V / 100[en]
抵抗 1,100 ohm (1000 + 100)
DCジャック -メス (DIP, 内径= 2.1mm)
DCアダプタ -19V(1200 mA)
*) 部品箱で適当に探した電源、おそらくPC用

*)その他、マイコン周辺は前回と同様。

# 配線
LEDは、リード線(アノード / カソード) に電線をハンダづけ
リレー出力端子は、小さい為、電線をハンダづけ
してます。

# web スイッチ操作画面
chrome Android
カンタンな ON/OFF操作のみ実装。


# code

#arduino-sdk , mqtt_arduino_relay_2.ino
arduino-adk 1.6.5
前回と同様、mqttライブラリが必要
スケッチの例 -[PubSubClient] - [mqtt_basic]
を参考にしました

Topicを適当に決めて、Pubしてみます
char mTopicIn[]="test-topic-1020A/relay";

D7に、リレー配線しておきます。




# web スイッチ画面
paho-mqtt JS版使います。
mqttws31.js, jquery 読み込み

# JS : mqtt-pub-sample-2-app.js
mqtt-publishの実装


# html : mqtt-pub-sample-2.htm
スイッチ操作画面

# テスト
web スイッチ画面から、
ON 押すと、LED点灯します。
OFF押すと、消灯。

# まとめ
web画面のON/OFF操作から 1秒弱で、
デバイスが動作しました。
リアルタイム操作としては、ある程度使える範囲かと思います。
室内のスマホ等から ON/OFFしてみると、あまりインパクトないのですが
クラウド経由の為、外出先からでも同じ動作になるはずです。
(ネット接続可能な場合)


# 参考の記事
arduino-lib
http://knolleary.net/arduino-client-for-mqtt/

paho-mqtt javascript
http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.javascript.git/

# 関連の記事
http://knaka0209.blogspot.jp/2015/10/mqtt-1.html

# 開発者向けのまとめ記事
http://knaka0209.blogspot.jp/2015/04/agri.html


2015年10月13日火曜日

ENC28J60+Arduino Pro mini(3.3V) でIoT製作、(番外編)


前回の [ ENC28J60+ATmega328 ] 記事の続編となります
sparkfun の[ Arduino Pro Mini 328 - 3.3V/8MHz ]を接続して
格安でオリジナル仕様のIoTデバイス製作を検討してみました。

[概要]
[ATmega329P]の構成より高額な為、価格面では
おすすめできる構成ではないので、番外編としてます。
ボードのサイズが
小型で、3.3V仕様のArduino 互換としては、少し安め(9.95 USD)
の機種かと思います。
*) 海外通販だと4ドル前後でもありそうです。海賊版?

Microchip 社の[ENC28J60] EtherNet Controller の対応モジュール
有線LANで、10 base-T と速度は遅めですが、
マイコン連携できる通信デバイスとしては、格安かと思います。
[Arduino Pro Mini - 3.3V ](30 pin) 接続して、
クラウド連携し、Lチカ(LED制御)までテストしてみたいと思います。


*) 関連URL,部品価格は執筆時点です。

# IDE 環境
ARDUINO SDK 1.6.5
UART経由で、書込み。
*) UART - シリアルモジュール使いました。


# 電源まわり
ベース電源= 3.3V 仕様
入力:マイクロUSB(5V /1A)
降圧 3.V3レギュレータで, 3.3Vに下げる。

# 部品
Arduino Pro Mini - 3.3V / 1243 [en] (スイッチサイエンスさん)
ENC28J60 イーサネットモジュール 950[en] (aitend さん)
電解コンデンサー 470マイクロ F   / 10[en] (秋月電子さん)
絶縁ラジアルリード型積層セラミックコンデンサー0.1μF50V (1個当たり)
 10[en] (秋月電子さん)
3.3Vレギュレータ-降圧 / 100[en]
マイクロUSB - メス / 200[en]

#ボードのサイズ
性能が異なる為、サイズ比較する意味はないのですが
AVR系なマイコン 並べてみました。

左から
Pro mini/ ATmega328/ ATtiny85/ ATtiny861

片側= 12 pin程度で、ATmega328Pより
長編方向は短い

# 配線 - レイアウト

基盤上に
[Reset]ボタン
MCU上側にLED(電源投入後に点灯する)
*) ピンヘッダは付属してない為、別途入手して
 ハンダづけ必要あります。(30 pin)

sparkfunの回路図を参考にしました。

上部の、IOピンは6P
GND, GND, VCC, RX, TX DTR
に接続されているようで、基板から電源供給している場合は、
右3P, 
RX, TX DTR を結線すれば、スケッチ転送はできそうです。

30 PIN
右=12 pin,左=12 pin,上= 6 pin
(Reset を下にした時)

下記の配線
[ENC28J60] - [Pro mini]
SCK - D13
SO - D12
SI - D11
CS - D8

VCC,GND を結線
D7 にLED 配線


# Code, HTTP受信と Lチカ
[Arduino Uno] 接続版と同じ、詳細は省略します。
http://knaka0209.blogspot.jp/2015/10/enc28j60-1.html

# スケッチ書込み
[ツール]-[ボード]- Arduino Pro or Pro Mini
を選択

[プロセッサ]- ATmega328 (3.3V, 8MHz)

シリアルポート設定済みを確認

書込みます。



#テスト : クラウド連携して、LEDの ON/OFF
クラウド側から、LED点灯時間を取得し、レスポンス解析、時間を 数値型に変換、
LED=ON, OFFするタイミング監視、LED =OFF


*)
電源投入後の60秒前後は、TCP受信処理が失敗する場合がありました
LAN側が安定するまで、少し時間がかかるのかもしれません。

*) デバック時に、ログ見る場合は
[UART-シリアル変換]モジュールを、Pro mini側 - UART(TX/RX)に
クロスで結線すると通信できます。

# DIY的にケース作成してみました。(仮の)
材料: ケース(100均で, 2個で100[en] 。食品保存用 )
ドリル工具と、精密ニッパ 側面に穴あけ。
電源、LAN ケーブールを通します。

上面からの図

*) LANモジュールが大きめの為、少し大きめのケースを選びましたが。
全体的のコンパクト化も検討が必要と思いました



#参考の記事
https://www.sparkfun.com/products/11114

# 関連の記事
ENC28J60+ARDUINO でIoT製作 (テスト編)
http://knaka0209.blogspot.jp/2015/10/enc28j60-1.html

ENC28J60+ATMega328P でIoT製作
http://knaka0209.blogspot.jp/2015/10/enc28j60-2.html


# 開発者向けのまとめ記事
http://knaka0209.blogspot.jp/2015/04/agri.html


2015年10月10日土曜日

ATmega328P-PU に、スケッチを書き込む (ARDUINO as ISP)



[概要]
Atmel 社の ATmega328P-PUに
ARDUINO SDK からスケッチを書き込むメモです。
今回は、ブートローダ書込済を使用しました。

# IDE環境
ARDUINO SDK 1.0.5
ARDUINO UNOを書込み装置として使用
3.3V Internal クロック 8MHz

# 参考URL
セットアップ、配線等は下記を参考
kosaka さんの記事

Arduino.cc


# 配線
*) 電源= 5V 結線してください

[ATmega328P-PU] - [ARDUINO UNO]
RESET - D10
MOSI - D11
MISO - D12
SCK - D13

VCC - 5V
GND - GND



# コンパイルの準備
詳細は、ATtiny85の記事に記載しております。

# スケッチの書込み
Uno接続して、シリアルポートを設定

UNOに、[ArduinoISP]書き込みます。(ISP通信で書き込むためのスケッチ)
[スケッチの例] -[ArduinoISP] でスケッチ開き、書き込む。

# 書き込み完了後、ターゲット - MCU にスケッチ書き込みます。
適当なスケッチ書いて、準備します(LチカでOK)

[ツール]-[マイコンボード]に、[ ATmega328P / Int. 8MHz ] を選択

シリアルポート設定済みを確認

書込装置 - [Arduino as ISP] を選択

書込みます。

[マイコンボードへの書込みが完了しました]
が表示されます。


==== update:2017/12/08 =====
pcから UART書込み方法を追加しました。 arduino IDE 1.0.5
FTDI 等で書き込む事ができました。
*) 上記で、arduino as ISP (+ arduino UNO) で書き込んでいますが。
IPS通信は配線数も多目で、UARTで書き込む方法を探しました。





# 配線
[ atmega328P ]- [ FTDI ]
RX - TX
TX - RX
RESET - DTR ( セラコン=0.1u をはさむ。 )

*) 3V3 電源/GND 結線しておきます。

マイコンボード : ATmega328 on a breadboard (8 MHz internal clock)
書込み装置 : AVRISP mkII
で書込みできました。結線の本数が少なくて今回は少しラクです。
arduino UNOも不要になりました。

*) マイコンボード設定は、ブートローダ書込み編と同じ設定ファイルを
使用しています。
http://knaka0209.blogspot.jp/2016/02/ATmega328-2.html


====


# 開発者向けのまとめ記事




ENC28J60+ATMega328P でIoT製作、Lチカも


前回の [ ENC28J60+arduino ] 記事の続編となります
Atmel 社の ATMega328P-PU を接続して
オリジナル仕様的な格安のIoTデバイス製作を検討してみました。

[概要]
Microchip 社の[ENC28J60] EtherNet Controller の対応モジュール
有線LANで、10 base-T と速度は遅めですが、
マイコン連携できる通信デバイスとしては、格安かと思います。
Arduino UNO の搭載MCU と同じ、ATMega328P-PU 単体チップ接続して、
クラウド連携し、Lチカ(LED制御)までテストしてみたいと思います。

*) 参考URL, 部品価格は執筆時点のものです

#MCU仕様など
今回は、ブートローダ書込済を使用しました。
28 PIN
ROM 32KB
RAM 2KB

# IDE 環境
ARDUINO SDK 1.0.5
ARDUINO UNO を書き込み装置として使用
3.3V 内蔵クロック 8MHz

# 電源まわり
ベース電源= 3.3V 仕様
入力:マイクロUSB(5V /1A)
降圧 3.V3レギュレータで, 3.3Vに下げる。

# 部品
ATMega328P-PU /  250[en] 

イーサネットモジュール [M28J60] / 950[en] (aitend さん)

電解コンデンサー 470マイクロ F   / 10[en] (秋月電子さん)
絶縁ラジアルリード型積層セラミックコンデンサー0.1μF50V (1個当たり)
 10[en] (秋月電子さん)
3.3Vレギュレータ-降圧 / 100[en]
マイクロUSB - メス / 200[en]
LED, 抵抗など

# 配線
Git - ethercard ライブラリの README に,
記載されているピン配線を結線します。
[ENC28J60] - [ATmega328P]
SCK - D13
SO - D12
SI - D11
CS - D8

VCC,GND を結線
D7 にLED 配線



# スケッチ書込み
ターゲット MCU側の電源= 5V 供給してください。 UNO から

詳細は、[ARDUINO SDK 1.0.5] -ATtiny85 記事と似ています。省略します。
詳細は、ATmega328P-PU 書込みに記載しています。

ENC28J60 EtherNet ライブラリ、インポート

[ツール]-[マイコンボード]- ATmega328P / Int.8MHz
を選択

シリアルポート選択 済みを確認

書込装置 - [Arduino as ISP] を選択

書込みます。


# Code, HTTP受信と Lチカ
Arduino接続版と同じ、詳細は省略します。

#テスト : クラウド連携して、LEDの ON/OFF
クラウド側から、LED点灯時間を取得し、レスポンス解析、時間を 数値型に変換、
LED=ON, OFFするタイミング監視、LED =OFF

*)
電源投入後の60秒前後は、TCP受信処理が失敗する場合がありました
LAN側が安定するまで、少し時間がかかるのかもしれません。

シリアルのログ
*) デバック時に、ログ見る場合は
[UART-シリアル変換]モジュールを、ATmega側 - UART(TX/RX)に
クロスで結線すると通信できます。


# 温度センサー追加してみました(dht11)
基盤の中段の左側(青系の部品)に、
温度湿度センサを追加

#部品
温度湿度センサー素子 [DHT11] / 300[en]

精度はさほど良くないみたいですが、
安価の為、購入してみました。

# センサー配線
正面、左から1pin

[dht11] - [atmega328]
1pin - 3V3
2pin - D2
4pin - GND

1 - 2pinの間に、 10k ohm抵抗。

# code : Arduino-sdk
D2 にセンサ接続。
温度、湿度値を取得して。クラウド送信します。

*) dht11 ライブラリのURLぬけていました。
ライブラリ追加が必要です。 ARDUINO-SDK
https://learn.adafruit.com/dht/downloads


# グラフ (温度, 湿度)




#参考の記事
kosaka さんの記事
http://make.kosakalab.com/make/electronic-work/arduino-ide-arduinoisp/
ライブラリ
https://github.com/jcw/ethercard

dht11 - adafruit
https://learn.adafruit.com/dht?view=all

# 関連の記事
ENC28J60+ARDUINO でIoT製作 (テスト編)
http://knaka0209.blogspot.jp/2015/10/enc28j60-1.html

ATtiny85-20PU に、スケッチを書き込む (ARDUINO SDK)
http://knaka0209.blogspot.jp/2015/10/attiny-85-1.html


# 開発者向けのまとめ記事
http://knaka0209.blogspot.jp/2015/04/agri.html


2015年10月9日金曜日

MQTT 準備編。Arduino EtherNet, paho-MQTT(over WebSocket)で表示も



軽量プロトコルのMQTT (MQ Telemetry Transport) の準備編の記事です。

[概要]
IoT/M2Mで使えそうな通信技術で
HTTPを使わずに、軽量/高速で通信できそうなプロトコル実装を
試す内容で
デバイス側の構成が
[Arduino Uno] + [EtherNe シールド] で、コスト的にも高め
複数の購入するのは厳しいの感ありますが、テストしてみました。

[MQTT 構成]
broker : test.mosquitto.org
publish(Pub) : IoT device (Arduino EtherNet)
subscribe(Sub) : Browser Chrome

Sub のブラウザ側のライブラリは paho-mqtt のJSライブラリを使用
内部的WebSocketみたいですので、Broker側がWebSocket対応している
必要がありそうです。

*) 関連URL/version 等は、執筆時点を記載しています

# 表示系のサンプル
chrome Android
デバイス側から、数値を加算して Pubする程度の仕組み。


[開発ツール]
Linux (Raspberry PI 2)
関連ツールを、インストールします。
mosquittoは、内部serverを起動しない場合は不要です。

MQTT server
pi@raspberrypi:~/tmp$ sudo apt-get install mosquitto

clientのツール
pi@raspberrypi:~/tmp$ sudo apt-get install mosquitto-clients

# テストします
下記はホスト名を指定していません。内部 brokerに接続

# subscribe--Subする
pi@raspberrypi:~/tmp$ mosquitto_sub -d -t test_topic

# publisher --Pubする
別のコンソール開き
pi@raspberrypi:~/tmp$ mosquitto_pub -t test_topic -m "24.5"

# 結果
Sub の画面に、Pubしたデータが表示されます。
pi@raspberrypi:~/tmp$ mosquitto_sub -d -t test_topic
Received CONNACK
Received SUBACK
Subscribed (mid: 1): 0
Received PUBLISH (d0, q0, r0, m0, 'test_topic', ... (4 bytes))
24.5
Sendin

# 表示系のライブラリ等 [paho-mqtt javascript] 

# commit ページの
org.eclipse.paho.mqtt.javascript-master.zip
をDL &解凍します。
 src/mqttws31.js を使います。

# IoTデバイス側 (Arduino) の実装
Arduino SDK 1.6.5
Arduino Client for MQTT

ライブラリをインストールしておきます


# テスト

# ARDUINO スケッチの準備
スケッチの例 -[PubSubClient] - [mqtt_basic]
を参考にしました

作業用ルータ設定の関係か、動作しませんでしたので
コードみながら、他のARDUINO-EtherNet関係比較したところ
IP指定せずに, DHCP方式に修正すると接続できました。
//Ethernet.begin(mac, ip);
if (Ethernet.begin(mac) == 0) {
  Serial.println("Failed to configure Ethernet using DHCP");
  Ethernet.begin(mac, ip);
}

Topicを適当に決めて、Pubしてみます
char mTopic[]="test-topc-1009A/sensor";

#code: Arduino SDK
2秒間隔で、数値を加算し、Pubしてます。
*) macアドレスを指定してますので、
複数設置する場合は重複に注意してください。

# mqtt_arduino_1.ino


# mosquitto_sub で結果見てみます
$ mosquitto_sub -d -h test.mosquitto.org -t test-topc-1009A/sensor

pi@raspberrypi:~/tmp$ mosquitto_sub -d -h test.mosquitto.org -t test-topc-1009A/sensor
Received CONNACK
Received SUBACK
Subscribed (mid: 1): 0
Received PUBLISH (d0, q0, r0, m0, 'test-topc-1009A/sensor', ... (2 bytes))
29
Received PUBLISH (d0, q0, r0, m0, 'test-topc-1009A/sensor', ... (2 bytes))
30
Received PUBLISH (d0, q0, r0, m0, 'test-topc-1009A/sensor', ... (2 bytes))
31

デバイス側のPub と、Sub 確認ができましたので、次 は
browser表示方法を検討します。


# 表示アプリ (MQTT over WebSocket)
上記の paho-mqtt JS版使います。
mqttws31.js, jquery 読み込み

topic は、デバイス側で指定とあわせる
var mTopic="test-topc-1009A/sensor";

clientId (クライアントID)は、重複した場合、
後勝ち(後で開いた画面の表示が有効、前は停止)になるようです。

Paho.MQTT.Client インスタンスを呼出、
connect コールバック内で、
subscribe 実行します

#code : mqtt-sub-sample-js-1.htm

起動時のconnect あたりが、数秒の待ち時間ありました。

# まとめ
デバイス側から、計算結果の数値を送信しているだけで
表示画面みていても、面白くはないのですが、
MQTTで短い間隔で、データ送信と、受信表示系の機能の
リアルタイム表示的な体験はできます。
次は活用編とか、センサー/実行系(LED)など検討したいと思います。


# 参考の記事


# 開発者向けのまとめ記事


2015年10月7日水曜日

ESP8266+ATtiny85 IoT製作、センサ値送信


[概要]
前回のesp8266 初期ファームを使った
[ esp8266+LPC1114FN28連携 ] 記事と似ていますが、
小型マイコン ATtiny85(8pin ,8bit)と連携して、
安価で小型なIoTデバイス検討したいと思います。
ブレボ1枚に、WIFI+MCU+電源+周辺デバイス回路まで実装できました。

*)
RAM=512 Byteしかない為、
開発時にメモリ削減の対応等で苦労ぎみでした
さほど小型化の必要がなければ、このMCUは選択しないほうが
良いかと思います。

# 部品リスト
ESP-WROOM-02 / 500[en]前後
ATtiny85 / 160[en] (秋月電子さん)
電解コンデンサー 470マイクロ F   / 10[en] (秋月電子さん)
絶縁ラジアルリード型積層セラミックコンデンサー0.1μF50V (1個当たり)
 10[en] (秋月電子さん)
3.3Vレギュレータ-降圧 / 100[en] (秋月電子さん)
マイクロUSB (メス) / 200 [en] (秋月電子さん)
抵抗, 配線等

# 配線- レイアウト
ATtiny側のSoftwareSerial(D3/D4)を、
ESP側のUARTに接続します。



WIFI側の配線は、テスト編と同じです。

# ATtiny pin 配置




# ATtiny コンパイル
ARDUINO SDK 1.0.5 (ATtiny用の設定が必要)
書込装置= Arduino as ISP を選択
ARDUINO UNO経由で書込み

コンパイル詳細は、ATtiny-テスト編にも記載しています

# 実装面
シリアル通信速度は、
ESPの初期(15200)だと、動作できませんでした。
9600 位に下げたほうが、良さそうです。

機能的にはmbed版と同じく、センサ値取得後
WIFI側UARTに、ATコマンドをシリアル送信する
実装でよいかと思います。

ATtinyのサンプルは、ATtiny-テスト編にも記載しています。
http://knaka0209.blogspot.jp/2015/10/attiny-85-1.html

==== update : 2015-10-08 ====
参考ファームのリンク追加しました。

数ヶ所修正必要で、設定するには手間かかります。
[ AT+CIPSEND ]の
HTTP送信長さは事前に計算し、固定にする必要があります。(改行含む)
メモリ領域パンクの為、動的に計算できていません、、

自力で実装できる方は、
参考にしないほうが良いです。

*)ベータ版で、全体的に見直しが必要です。

[pythonでの計算例]
pi@raspberrypi:~/tmp$ python
Python 2.7.3 (default, Mar 18 2014, 05:13:23)
>>> s="GET /api1234.php?snum_1=1234 HTTP/1.0\r\n";
>>> s=s+"Host: your-dns.com\r\n\r\n";
>>> len(s);
61
>>> quit();

[AT設定-ESP] 
上記はTCP送信のみで、
事前にルータ設定(SSID等)などは手動で設定が必要です。

注) 初心者向きではありません。ご注意下さい。
AT関連の設定を、工場出荷-初期状態に復旧できる方を前程にしてます。
UART通信関連の設定を失敗すると、シリアル通信でAT操作できなくなります

ATコマンド例: UART通信速度変更/ 子機モード設定/ AP設定
AT+UART_DEF=9600,8,1,0,0
AT+CWMODE=1
AT+CWJAP="ssid","password"
============================

# テスト
光センサを結線して、クラウド送信してみました。

グラフ



# DIY編で、ケース作成してみました。(仮の)
材料: ケース(100均で, 3個で100[en] 。食品保存用 )
ドリル工具と、精密ニッパで側面に穴あけ。
上面からの図 



#関連の記事
ATtiny85-20PU に、スケッチを書き込む (ARDUINO SDK)

# 参考の記事

# 開発者向けのまとめ記事


ATtiny85-20PU に、スケッチを書き込む (ARDUINO SDK)



[概要]
Atmel 社の小型マイコン ATtiny85-20PU に
ARDUINO SDK からスケッチを書き込むメモです。

# MCU仕様など
8 PIN
8 Bit CPU
ROM : 8K Byte
RAM : 512 Byte
動作電圧: 2.7V - 5.5V
UARTなし、SoftwareSerial 使えます(Arduino SDK)

# IDE環境
ARDUINO SDK 1.0.5
ARDUINO UNOを書込み装置として使用
ISP通信で、ターゲットMCUに書込
3.3V Internal クロック 8MHz


# ピン配置
チップ上方向= 左上に[丸]くぼみのマーク を基準として配置


# 配線


[ATiiny85] - [ARDUINO UNO]
RESET - D10
MOSI - D11
MISO - D12
SCK - D13

VCC - 3.3V
GND - GND


# コンパイルの準備
 Arduinoo SDK 1.0.5 インストール

 作業フォルダの設定
 [ファイル]-[環境設定]で、スケッチブックの保存場所 を設定
 例) C:\arduino-1.0.5-r2\work
*)インストール先によって異なります。

 ATtiny等の設定ファイルの配置
 kosakaさんのページの。[hardware.zip]をDL &解凍、作業フォルダに配置 (中段)
 http://make.kosakalab.com/make/electronic-work/arduino-ide-arduinoisp/
 パス例: C:\arduino-1.0.5-r2\work\hardware

 arduino SDKの再起動
 [ツール]-[マイコンボード]に、ATtiny85 (internal 8 MHz clock)
 が選択可能な事を確認。


# スケッチの書込み
Uno接続して、シリアルポートを設定

[ツール]-[マイコンボード]-[Arduino Uno] 選択

UNOに、[ArduinoISP]書き込みます。(ISP通信で書き込むためのスケッチ)
[スケッチの例] -[ArduinoISP] でスケッチ開き、書き込む。

# 書き込み完了後、ATtinyにスケッチ書き込みます。
適当なスケッチ書いて、準備します(LチカでOK)

A1にセンサ接続して、値をシリアル出力する例です



[ツール]-[マイコンボード]に、ATtiny85 (internal 8 MHz clock) を選択

シリアルポート設定済みを確認

書込装置 - [Arduino as ISP] を選択

書込みます。

[マイコンボードへの書込みが完了しました]
が表示されます。


下記が表示されましたが、書込みは問題ないようでした。
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85

ATtiny は、
ISP関係の配線を外して、実行可能です

==== 2015-10-15 =============
delay()の、タイマー間隔がずれる場合は、
初期の内部クロックが、1MHzの可能性があります。
ブートローダを書き込むと(内部クロック=8MHz)、修正できました。
1秒間隔のLチカで、確認できます。
=============================


# 開発者向けのまとめ記事
http://knaka0209.blogspot.jp/2015/04/agri.html

google colaboratory お試し編 、GPUも使える機械学習の環境構築

前回続き、機械学習の関連となります。 開発環境まわりの内容となり。先人様の情報を元に調査しました。 google colab(google colaboratory) を試してみました。機械学習系の いくつかのライブラリがインストール済みで、 クラウド上で、ある程度機械学...

AD-parts

Shop
Bluetooth搭載
ベース基板

Social