寝台急行はまなす

札幌駅 22:00発 増結12両編成 青森行き

MicroPython Advent Calender 1日目 What is MicroPython?

qiita.com

 

MicroPython Advent Calender 1日目です。

 

今年のmicropythonを振り返る記事を書こうと考えていましたが、オライリーでmicropythonの本が出版されたのでその内容と1章のWhat is MicroPython?を紹介したいと思います。

 

www.amazon.com

 

本の構成は以下のようになっています。

    序文

  1. What is MicroPython?
  2. Pyboard
  3. BBC micro:bit
  4. Adafruit Circuit Playground Express
  5. ESP8266/ESP32
  6. Thinking Embedded
  7. Visual Feedback
  8. Input and Sensing
  9. GPIO
  10. Networking
  11. Sound and Music
  12. Robots
  13. Idiomatic MicroPython
  14. Next Steps

 

1章ではなぜMicro+Pythonなのかという点とMicroPythonの誕生とこれまでの経緯が書かれています。

MicroPythonの作者はDemian Georgeさんです。

彼はケンブリッジ大学の物理学者である一方、RoboCupロボコン)の競技者でもあり自らCコンパイラをスクラッチ作成するなど優れた才能を持つ方のようです。

そんなDemianさんが2013年の余暇の時間にマイコンPythonを作成し始めたのがMicroPythonのスタートです。

Demianさんは開発のためKickstarterのキャンペーンを張り見事に大成功。

2014年には出資者にpyboardが配布されました。

 

Micro Python: Python for microcontrollers by Damien George — Kickstarter

 

micropythonのcommunityはすぐさま大きくなり、github上で世界中の人々からの貢献でバグ、ドキュメント、ツール、他ボードへの移植がなされました。

 

2015年、European Space Agency(欧州宇宙機関)がmicropythonの開発を援助することが発表されました。

人工衛星ペイロードを計算する用途で研究開発が行われたようです。

 

同じころイギリスのBBCは全国の11歳の児童に教育向けデバイスの配布を発表しました。現在では日本でも発売されているmicro:bitです。

このmicro:bitへのmicropython移植を手伝ったのがDemianさんでした。

ちょうどmicro:bitの基板設計者がケンブリッジのDemianさんのオフィスの隣人だったこともあり、プロトタイプのボードで移植作業が進められたようです。

 

micropythonの成功はその派生形を生みました。

AdafruitはmicripythonをforkさせてSAMD21をターゲットにしたCircuitPythonを作りました。

Make: Japan | AdafruitがCircuitPythonへ移行

 

※Adafruitのmicropythonのページはとても充実していて見ていて飽きませんのでぜひご覧ください。

Adafruit Learning System

 

2016年、micropythonの2回目のKickStarterが募集されました。

 

MicroPython on the ESP8266: beautifully easy IoT by Damien George — Kickstarter

 

2回目はESP8266への移植です。それまでのmicropythonがターゲットとしていたSTM32などのマイコンは直接インターネットに接続することはできないタイプです。

wifiチップとTCP/IPプロトコルを搭載したESP8266への移植によりmicropythonのIoTへの道が開かれることとなりました。

 

2017年には更にESP32への移植が進められています。

夏に開催されたMaker Fair Tokyoではmicro:bitの日本発売が発表されました。

micro:bitプロジェクトの創始者も来日してスピーチを行ってました。

 

micropythonは年々サポート対象のボードが増え開発も活発に行われています。

欧州宇宙機関が開発を支援するなど、ホビー用途のみならず産業用途での使用も今後増えていくのではないでしょうか。

 

 以上、大いに誤訳もあったと思いますが1章の内容とこれまでmicropythonについて記載しました。

 

2章以降の内容につきましてもMicroPython Advent Calenderの中でご紹介していきたいと思います。

 

AVTOKYOの一番長い日

AVTOKYO 2017に参加して半田付けしてきました。

参加者に配られた基板はこうして出来上がったという視点でレポを記します。

 

f:id:ken5owata:20171115200047j:image

 

2017年11月5日(日) 足立区保塚地域学習センター

AVTOKYOの1週間前であるこの日、足立区の公民館に13時に集まり今回の基板製作者(@nanbuwks)より当日の流れと基板がまた到着していない知り驚く。

f:id:ken5owata:20171116005657j:plain

 

 

f:id:ken5owata:20171114203931j:image

上が当初の構想段階であった。

残念だが力及ばずこうならなかった。

f:id:ken5owata:20171114203903j:image

プログラムの流れ検討

f:id:ken5owata:20171114204003j:image

今回の基板に使用したのはstm32f103c8t6でありAliexpressで非常に安価($2)で手に入る。

環境を構築するとarduinoIDEで使用可能になる。

adafruitのOLEDのライブラリを修正後プログラムを書いていた。

 

4時過ぎにコーヒー休憩をしてお子さんが散らかした部屋に掃除機を掛けて時間となった。

終了後は@nanbuwksファミリーを車に乗せて秋月電子八潮店に向かった。

f:id:ken5owata:20171114204751j:image

初めて入った八潮店は通路が広く快適でここでは基板に付ける電池ボックスが調達された。

下のお子さんがとことこやってきて「う◯こ」と言われたが時すでに遅かった。

@nanbuwksファミリーを送り届けた後帰宅した。 

 

11月9日(木) 秋葉原 ナノラボ

基板が到着し半田付けを手伝うため夜19時、秋葉原ナノラボに6人が集まった。

f:id:ken5owata:20171115220627j:image 

夜10時まで半田付けがもくもくと行なわれた。

この時点で完成していたのは150枚ほどだったろうか。

ナノラボで紙袋を頂き70枚分の部品を自宅に持って帰った。

 

11月10日(金) 自宅

朝家を出る前に親父に半田付け依頼を出す。

10時に帰宅するとマイコンの半田付けはほぼ終了していた。グッジョブ親父。

セブンのホットドッグを齧りながら半田付け作業が始まった。

 

11月12日(土)自宅、CLUB SIX TOKYO - 六本木

AVTOKYO当日である。

親父の活躍により12時過ぎにはマイコンとOLED、赤外線LEDの半田付けが完了していた。残りはスイッチであったが表面実装のため時間がかかり70枚のスイッチが付いたのは朝4時であった。

f:id:ken5owata:20171115084805j:image

スイッチをつけた基板にブートローダを焼いた後活動限界を迎え仮眠を取った。

 

8時半に起床、荷物をまとめ会場の六本木に向かう。

荷物の搬入を手伝い作業スペースで半田付けとプログラム書き込みに分かれて作業が始まった。

この時点で会場オープンまで残り1時間半である。

f:id:ken5owata:20171115085414j:image

 

危機を察知したスタッフ、一般参加者も加わって半田付け作業が進められた。

手伝って頂いた方云く、硫黄島のような絶望的戦いとのことである。

私は戦時中の工場で働く気分を感じることができた。

 

そうこうするうちに会場オープンまで後15分となったが、この時点で完成品はどれだけ出来たのか、プログラムは動いているのか、あと何枚残っているのかなど状況を把握している者はおらず混乱の坩堝である。

本来であれば入場時に基板が配られる予定だったが主催者判断により後で配布されることとなった。

誠に申し訳ない…

f:id:ken5owata:20171116010956j:plain

 

そうこうするうちに12時に会場オープンとなり続々と参加者が入ってきた。

半田付けスペースは会場入り口すぐのところであったためおのずと人目についたがこちらはそんなことは気にしてられない。

早く半田付けをして基板を完成させないと参加者に配布できないのである。

取り憑かれたように半田付けを続行し16時頃には何とか配布できる分を捌いて一息つけただろうか。

 

ラムコークを一杯飲んで一息付けた後、不良品を修正するため作業スペースに戻った。

半田不良や部品付け忘れに取り組み18時過ぎには主催者から予定数が足りたとのことで組み立て工場は稼働を終えることになった。

この時点で朝から何も食べていなかった。

 

ぐったりして座っていると19時を回った。

20時で終わるために片付け作業を始めないといけない。

とりあえず持ってきたものを箱に詰めていき工場閉鎖はつつがなく完了した。

 

クローズを見届けた後、荷物とともに会場を出た。

打ち上げの招待券を頂いたのでありがたく中華をがっついた。

f:id:ken5owata:20171115200224j:image

北京ダッーーーーーク!!

 

23時前に打ち上げは終了、日比谷線への荷物搬入を手伝い帰宅した。

こうして長い一日は終わったのであった。

 

初めて参加したAVTOKYOであったが六本木のクラブで半田付けを行うという貴重な体験が出来たのでとてもよかったと思う。

参加者がクリックして遊んでくれてるのを見て半田付けした甲斐があったなと実感した。

個人的には表面実装のコツが掴めたので半田付けがちょっと上手くなったかも。 

 

 ※AVTOKYOは半田付けを行うイベントではありません。

 アルコール片手に語り合うセキュリティ・カンファレンスです。

ESP32を始めてみる AWS IoTにデータを飛ばす編

ということをやってので備忘録として思い出して書いておきます。

抜けている個所や説明が間違っていたらすみません。

適時公式ドキュメントとかで保管して頂きたく。

 

下の写真でスイッチを押したらDHT11センサーから取得した温湿度をESP32でAWS IoTに飛ばしてS3にデータを保存します。

 

 

AWSの設定

AWS IoTのコンソールを開きモノを作成します。

f:id:ken5owata:20171021184228p:plain

 

次に接続時に使う証明書を作成してダウンロードします。

f:id:ken5owata:20171021185207p:plain

f:id:ken5owata:20171021185244p:plain

ポリシーを作成して証明書をひもづけます。

f:id:ken5owata:20171021194624p:plain

f:id:ken5owata:20171021194703p:plain

 

作成したモノと証明書をひもづけます。

f:id:ken5owata:20171021190552p:plain

 

今回作成したモノのAPIエンドポイントのURLをコピっておきます。

f:id:ken5owata:20171021192104p:plain

 

最後にデータをS3に保存するルールを作成します。

ESP32というルールを作成してS3にメッセージを格納するというアクションを設定します。

ルールクエリの'ESP32/DHT11'がトピックの部分になります。

f:id:ken5owata:20171021195626p:plain

これでAWS側の準備は完了だったはずです。

 

Arduinoでスケッチ作成

必要な以下のライブラリをライブラリマネージャから入れます。

・ArduinoJson

・DHT sensor library

・Adafruit Unified Sensor

 

スケッチ例にあるWiFiClientSecureをもとにスケッチを作成していきます。

スケッチ例の11行目と12行目にWifiSSIDとパスワードをセットし、14行目にはコピっておいたAPIのエンドポイントを貼り付けます。

 

20行目のtest_root_caにダウンロードしたルート証明書の内容を貼り付けて置き換えます。

50行目のtest_client_keyにxxxxxxxxxx-certificate.pemの内容を貼り付け、

51行目のtest_client_certにxxxxxxxxxx--private.pem.keyの内容を貼り付けます。

 

最後に76行目と77行目のコメントアウトを除きます。

 

スイッチが押されてOFFを検知したらDHT11から読みだした温度と湿度をJSONにセットしてHTTPSに飛ばします。

最後にスケッチを貼り付けておくのでご笑覧ください。 

 

スケッチができたらESP32に書き込んで動作確認を行います。

まずはシャドウステータスの更新を行ってみます。

シャドウステータスの場合はURLが "/thing/作成したモノの名前/shadow"になります。

それではスイッチを押してみると...

f:id:ken5owata:20171021234903p:plain

f:id:ken5owata:20171021221146p:plain

 更新されました。

シャドウステータスが送信したJSONデータになっています。

 

次にURLをトピックのものに書き換えてデータがS3に保存されることを確認します。

トピックのURLは "/topics/ESP32/DHT11"になります。"/topics/"の後ろがルールクエリとなる仕組みのようです。

それではスイッチを押すと...

f:id:ken5owata:20171021234921p:plain

f:id:ken5owata:20171021234545p:plain

 

ちゃんとデータが保存されていました。

f:id:ken5owata:20171021234944p:plain

というわけでこんな感じでAWS IoTとESP32で遊ぶことができました。

今回は簡単にS3にデータ保存するだけでしたが、AWS lambdaでサーバーレス処理とかにもチャレンジしてみたいですね。

あと、HTTPSをMQTTにするとかも。

 

最後にスケッチを貼り付けておきます。

GitHub - satoken5/ESP32Sample: ESP32のサンプルスケッチ

gistf1bed342d0058e04fefcd897c1b0d00f

micropythonをはじめよう(ESP32編)

ESP32が国内発売されるようになり半年以上が立ちにわかにmicropythonが取り上げられるようになってきました。

以下の記事や今月号のトラ技でも記事が書かれています。 

 

makezine.jp

 

ESP32のファームウェアは夏ごろから公式サイトで公開され自分でビルドする必要もなくなり、今では書き込みツールでファームウェアを書くだけで手軽にmicropythonをスタートできるようになりました。

改めてファームウェアの書き込みと公式ドキュメントのチュートリアルをちょこっとやってみたいと思います。

 

※micropythonのファームウェアをESP32に書き込むことで技適の認証に抵触する可能性があります。あくまで自己責任でお願い致します。

 

ファームウェアの書き込み

何はともあれファームウェアを公式から落とします。

MicroPython - Python for microcontrollers

 

f:id:ken5owata:20171018230635p:plain

 

次に書き込みツールをインストールします。

GitHub - espressif/esptool: ESP8266 and ESP32 serial bootloader utility

# pip install esptool

 

Windowsの人はメーカのGUIツールでも構いません。

Tools | Espressif Systems

 

ツールを適時インストールしたら、ファームウェアを書き込みます。

esptoolの場合はこんな感じです。

# esptool.py --port COM4 --baud 460800 write_flash --flash_mode dio --flash_size=detect 0x1000 esp32-20171006-v1.9.2-276-ga9517c04.bin

 

f:id:ken5owata:20171018231914p:plain 

 

CLIGUIも0x1000にファームウェアを書き込みます。

ファームウェアに書き込みが正常に終了したら、teratermやscreenコマンドでシリアルポートにアクセスします。

micropythonのREPLが開きコードを入力→実行ができます。

 

f:id:ken5owata:20171018232720p:plain

 

チュートリアル

micropythonには公式ドキュメントがあります。

ESP32のドキュメントはないのですがほぼ同じのESP8266のものに沿ってチュートリアルを進めていきます。

 

MicroPython tutorial for ESP8266 — MicroPython 1.9.2 documentation

 

・Lチカ

>>> from machine import Pin
>>> p = Pin(4, Pin.OUT)

>>> p.value(1)
>>> p.value(0)

 

・ADC

>>> pin32 = Pin(32, Pin.IN)
>>> adc = machine.ADC(pin32)
>>> adc.read()

 

・ファイル操作

>>> f = open('data.txt', 'w')
>>> f.write('micropython')
11
>>> f.close()
>>>
>>> import os
>>> os.listdir()
['boot.py', 'data.txt']
>>>

>>> f = open('data.txt', 'r')
>>> f.read()
'micropython'
>>> f.close()
>>>

>>> os.remove('data.txt')
>>> os.listdir()
['boot.py']
>>>

 

・neopixel

>>> import machine
>>> import neopixel

>>> pin = machine.Pin(4, machine.Pin.OUT)
>>> np = neopixel.NeoPixel(pin, 20)
>>> np[0] = (255, 0, 0)
>>> np[1] = (0, 128, 0)
>>> np[2] = (0, 0, 64)
>>> np.write()

 

 

wifi接続

>>> import network
>>> sta_if = network.WLAN(network.STA_IF)

>>> sta_if.active(True)

>>> sta_if.scan()

>>> sta_if.connect('ssid', 'password')

>>> sta_if.ifconfig()

 

・ソケット

>>> import socket
>>> addr_info = socket.getaddrinfo("towel.blinkenlights.nl", 23)
>>> addr = addr_info[0][-1]
>>> s = socket.socket()
>>> s.connect(addr)
>>> while True:

...   data = s.recv(500)
...   print(str(data, 'utf8'), end='')

 

f:id:ken5owata:20171021000904p:plain

 

スターウォーズのAAが流れ続けるのでCtl+Cで止めましょう。

 

さてここまではREPLでコードを実行してきました。

自作したプログラム(pyファイル)を実行する場合はツールでファイルを転送します。

以下のコマンドでツールを入れます。

# pip install adafruit-ampy

 

adafruitが出しているこのampyツールにはget、ls、put、rmなどのコマンドがありポートを指定してファイルを転送したり削除したりします。 

ダウンロードしたファームウェアはboot.pyファイルしかない状態です。

boot.pyファイルは起動時に1回のみ実行されるファイルです。

 

>>> import os
>>> os.listdir()
['boot.py']
>>>

 

永続的にプログラムを実行させる場合はmain.pyを作成してampyツールで送り込みます。

boot.pyとmain.pyはArduinoでいうところのsetupとloop関数というわけですね。

 

# ampy -p COM4 ls

# ampy -p COM4 put main.py

 

以上、簡単な紹介でした。

ぜひ皆さんもmicropythonで遊んでみましょう!

  

CentOS7にZabbixを入れる

dockerで触ってましたが、CentOS7の仮想マシンに入れました。

 

qiita.com

 

・環境

# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

 

rpmを追加 

# curl -O http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

# rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm

 

・Zabbixをインストール

# yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent

# yum install -y mariadb-server

 

・DBの設定

以下を/etc/my.cnf.d/server.cnfに追加

[mysqld]
character-set-server = utf8
collation-server     = utf8_bin
skip-character-set-client-handshake
innodb_file_per_table

 

DBを起動させてDBを作成。パスワードをセット。

# systemctl start mariadb

# mysql -uroot

MariaDB [(none)]> create database zabbix;

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'password' ;

MariaDB [(none)]> exit

 

初期データを作成します。

# zcat /usr/share/doc/zabbix-server-mysql-3.2.7/create.sql.gz | mysql -uroot zabbix

 

/etc/zabbix/zabbix_server.confにDBのパスワードをセットします。

DBPassword=password

 

/etc/httpd/conf.d/zabbix.confにタイムゾーンをセットします。

php_value date.timezone Asia/Tokyo

 

・サービスを起動

# systemctl start zabbix-server
# systemctl start zabbix-agent
# systemctl start httpd
# systemctl enable zabbix-server
# systemctl enable zabbix-agent
# systemctl enable httpd

 

selinux

ところがzabbix-serverが起動せず、selinuxを切ると起動しました。

# setenforce 0

# systemctl status zabbix-server
● zabbix-server.service - Zabbix Server
   Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; vendor preset: disabled)
   Active: active (running)

 

・firewall設定

webにアクセスできず、firewallの設定を忘れていました。。

# firewall-cmd --add-port=10051/tcp --zone=public --permanent
# firewall-cmd --add-service=http --zone=public --permanent
# systemctl restart firewalld

 

・ログイン

http://ZabbixサーバーのIPアドレス/zabbix/ にアクセスして初期設定を順次入力していきます。

入力後、Admin/zabbixでログイン。

f:id:ken5owata:20170803214119p:plain

 

完了しました。

dockerでZabbixを触ってみる

お仕事でZabbix触るっぽいんでdockerで触ってみたお。

ほぼチュートリアルをなぞっただけ。

 

Dockerized Zabbix - Zabbix.org

 

dev.classmethod.jp

 

環境はUbuntu16.04です

 

・imageの取得

必要なdockerimageをpullしてきます。

 

$ sudo docker pull monitoringartist/zabbix-db-mariadb

$ sudo docker pull monitoringartist/zabbix-xxl

 

・DB用のコンテナ起動

 $ sudo docker run \
    -d \
    --name zabbix-db \
    --env="MARIADB_USER=zabbix" \
    --env="MARIADB_PASS=my_password" \
    monitoringartist/zabbix-db-mariadb

 

・Zabbixサーバのコンテナを起動

$ sudo docker run \
    -d \
    --name zabbix \
    -p 8080:80 \
    -p 10051:10051 \
    -v /etc/localtime:/etc/localtime:ro \
    --link zabbix-db:zabbix.db \
    --env="ZS_DBHost=zabbix.db" \
    --env="ZS_DBUser=zabbix" \
    --env="ZS_DBPassword=my_password" \
    --env="XXL_zapix=true" \
    --env="XXL_grapher=true" \
    monitoringartist/zabbix-xxl:latest

 

・ログイン

ブラウザでアクセスし

f:id:ken5owata:20170418074730p:plain

 

admin、zabbixでログイン

f:id:ken5owata:20170418074756p:plain

 

おしまい。

Intel NUCで始める自宅ESXi6.5

というわけでIntel NUCを買いました。

第6世代のNUC6i3SYHです。

 

f:id:ken5owata:20170702125218j:image

 

お仕事でWindowsサーバを触れることも多くなりAWSでもいいんだけど、手元にあったほうが何かと便利だしESXiの勉強にもなるかなと思う次第でありまして。

購入代金はなんとかボーナスでまかなえるはず。。。。(震え声

 

秋葉原ツクモに行って必要なものを購入、取説みて組み立てます。

thinkpadの分解とかよりはるかにラクチンであっという間です。

 

f:id:ken5owata:20170702125858j:image

 

組み立てたらキーボードとHDMI-VGAの変換ケーブルをモニターに接続して電源ON、BIOS画面へ入ります。

ちゃんとメモリとSSDが認識しているのを確認します。

メモリとSSDの認識を確認したらダウンロードしたVMware-VMvisor-Installer-6.5.0-4564106.x86_64.iso をUSBメモリに書き込ませてインストールしました。

特にエラーもなくすんなりとインストールできました。

f:id:ken5owata:20170730214853p:plain

 

インストール後、以下の2つを対応しました。

1.データストアのアクセスが遅い

isoのアップロード遅くね?OSのインストール遅くね?とか思ってたら、以下のページと同じ現象が起きていたようなので、SSHログインして以下コマンドを実行しました。

[root@localhost:~] esxcli system module set -e=false -m=vmw_ahci

 

blog.kurokobo.com

 

2.NICを追加

NUCはデフォルト1ポートしかNICがありません。以下URLそのままにUSBのLANアダプタを買ってきてNICを追加しました。

http://blog.techlab-xe.net/archives/5227

USB 3.0 Ethernet Adapter (NIC) driver for ESXi 6.5 | virtuallyGhetto

↑のURLを参考に以下コマンドを実行した後、再起動すると追加したNICが認識されました。

[root@localhost:~] esxcli software vib install -v /vghetto-ax88179-esxi65.vib -f
Installation Result
   Message: Operation finished successfully.
   Reboot Required: false
   VIBs Installed: virtuallyGhetto_bootbank_vghetto-ax88179-esxi65_6.0.0-1.0.0
   VIBs Removed:
   VIBs Skipped:
[root@localhost:~]

[root@localhost:~] esxcli system module set -m=vmkusb -e=FALSE

 

f:id:ken5owata:20170730213930p:plain

 

というわけでこれから楽しいESXiライフを送ろうと思います。(`・ω・´)

f:id:ken5owata:20170730215842p:plain