DragonBoard 410c(Debian)でGPIOを使用する

DragonBoard 410c(Debian)でGPIOを使用する

そろそろDragonBoard(debian)でもGPIOを使用したくなってきましたので、GPIOを使用するための設定を行いたいと思います。

お急ぎの方は下の方にある解答編まで飛ばしてください。

手順

DragonBoard(debian)でGPIOを使用するには2つののライブラリが必要になります。

  • libsoc
  • 96BoardsGPIO

これらを用いることでGPIOがC言語およびpythonでも使用できるようになります。 ※pythonに関しては言語用Bindingがあるので、それを経由してLibraryにアクセスすることになります。

今回はこちらを参考にさせていただいています。

qiita.com

参考にしていたエントリのまんまなので楽勝と思っている自分がいました。

f:id:ueponx:20170528160909j:plain

基本的にはどちらもソースファイルをGithubから取得しbuildしていくというものになります。

buildに必要なパッケージのインストー

96BoardsGPIOをbuildする際にautogen.shを使用するので以下のパッケージを事前にインストールしておきます。

$ sudo apt-get install autoconf automake libtool

事前の準備は終了しました。

libsocをインストールする

libsocのgithubページは以下になります。

github.com

$ git clone https://github.com/jackmitch/libsoc.git
$ cd libsoc
$ autoreconf -i
$ ./configure --enable-board="dragonboard410c"
$ make
$ sudo make install

以上の手順で無事にインストールできました。

96BoardsGPIOをインストールする

github.com

手順を確認すると以下の様になるのですが…

$ git clone https://github.com/96boards/96BoardsGPIO.git
$ cd 96BoardsGPIO
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

makeを実行すると以下のようにErrorが発生してしまいます。

$ make
Making all in lib
make[1]: Entering directory '/home/linaro/96BoardsGPIO/lib'
/bin/bash ../libtool  --tag=CC   --mode=compile gcc -DPACKAGE_NAME=\"96BoardsGPIO\" -DPACKAGE_TARNAME=\"96boardsgpio\" -DPACKAGE_VERSION=\"0.1\" -DPACKAGE_STRING=\"96BoardsGPIO\ 0.1\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"96boardsgpio\" -DVERSION=\"0.1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I.  -I../lib   -g -O2 -MT lib96BoardsGPIO_la-gpio.lo -MD -MP -MF .deps/lib96BoardsGPIO_la-gpio.Tpo -c -o lib96BoardsGPIO_la-gpio.lo `test -f 'gpio.c' || echo './'`gpio.c
libtool: compile:  gcc -DPACKAGE_NAME=\"96BoardsGPIO\" -DPACKAGE_TARNAME=\"96boardsgpio\" -DPACKAGE_VERSION=\"0.1\" "-DPACKAGE_STRING=\"96BoardsGPIO 0.1\"" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"96boardsgpio\" -DVERSION=\"0.1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I../lib -g -O2 -MT lib96BoardsGPIO_la-gpio.lo -MD -MP -MF .deps/lib96BoardsGPIO_la-gpio.Tpo -c gpio.c  -fPIC -DPIC -o .libs/lib96BoardsGPIO_la-gpio.o
gpio.c: In function ‘gpio_id’:
gpio.c:63:17: warning: implicit declaration of function ‘strdup’ [-Wimplicit-function-declaration]
   char *fixed = strdup(pin_name);
                 ^~~~~~
gpio.c:63:17: warning: incompatible implicit declaration of built-in function   strdup’
gpio.c: In function ‘gpio_open’:
gpio.c:98:41: error: ‘LS_SHARED’ undeclared (first use in this function)
  gpio *g = libsoc_gpio_request(gpio_id, LS_SHARED);
                                         ^~~~~~~~~
gpio.c:98:41: note: each undeclared identifier is reported only once for each function it appears in
gpio.c:101:7: warning: implicit declaration of function ‘strcmp’ [-Wimplicit-function-declaration]
  if (!strcmp(direction, "in"))
       ^~~~~~
Makefile:459: recipe for target 'lib96BoardsGPIO_la-gpio.lo' failed
make[1]: *** [lib96BoardsGPIO_la-gpio.lo] Error 1
make[1]: Leaving directory '/home/linaro/96BoardsGPIO/lib'
Makefile:459: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1

warningは目を瞑るとして、

gpio.c:98:41: error: ‘LS_SHARED’ undeclared (first use in this function)
  gpio *g = libsoc_gpio_request(gpio_id, LS_SHARED);
                                         ^~~~~~~~~
gpio.c:98:41: note: each undeclared identifier is reported only once for each function it appears in

エラーメッセージから推測するとLS_SHAREDというシンボルが読み取れないということのようです。LS_SHAREDはlibsocのヘッダーファイルに定義されていたので、ヘッダーファイルのパスが想定とは違っているようです。っていうか、参考にしたサイトはこれでいいということのようなんですが、OSのバージョンということなんでしょうか。

色々試してみたのですが、自分のキャパを超えていたのでどうすればいいかわからず、OSを入れたりconfigureをいじってみたり、オプションを変えてみたりしました。

解答編

OSを何度もいれたりして試したのですが諦めて色々と調べているとlibsocのLibraryのReadmeに以下のような部分を発見。

First, check if your distro packages libsoc. If it does it is easiest to install your distros version of libsoc through it’s provided package manager. Depending on your distro this may be apt-get, yum, pacman, etc. Consult your distro documentation for more info

もしかしてパッケージ化されたLibraryがあるんじゃない?と思って試してみました。

あるし… (ちなみになぜかデフォルトでlibsocのpythonバインドのパッケージが既にインストールされています。)

気を取り直して、まっさらな状態からのインストール手順をまとめます。

$ sudo apt-get install autoconf automake libtool
$ sudo apt-get install libsoc2 libsoc-dev python-libsoc
$ git clone https://github.com/96boards/96BoardsGPIO.git
$ cd 96BoardsGPIO/
$ ./autogen.sh
$ ./configure
$ make

...()...

gpio.Tpo -c gpio.c  -fPIC -DPIC -o .libs/lib96BoardsGPIO_la-gpio.o
gpio.c: In function ‘gpio_id’:
gpio.c:63:17: warning: implicit declaration of function ‘strdup’ [-Wimplicit-function-declaration]
   char *fixed = strdup(pin_name);
                 ^~~~~~
gpio.c:63:17: warning: incompatible implicit declaration of built-in function   strdup’
gpio.c: In function ‘gpio_open’:
gpio.c:101:7: warning: implicit declaration of function ‘strcmp’ [-Wimplicit-function-declaration]
  if (!strcmp(direction, "in"))
       ^~~~~~
...()...

$ sudo make install
$ sudo ldconfig

今回はwaringは発生していますが、Errorは発生せずにインストールできるようになりました。(96BoardsGPIOのインストール手順は変更ありません。)

これでOKです。

サンプルの実行

インストールが無事終了したので実際のサンプルでLチカを行ってみたいと思います。

https://az835927.vo.msecnd.net/sites/iot/Resources/images/PinMappings/DB_Pinout.png

上記の図を参考に

  • PIN1がGND
  • PIN23がGPIO-A

としてLEDを接続します。 96BoardsGPIOのソースにあるexampleディレクトリに移動して、サンプルソースmakeを行い成功したらできた実行ファイルを実行します。

$ cd examples/
$ make
$ sudo ./blink

するとこのようになります。

【動画】

youtu.be

無事にLチカすることができました。 同じフォルダにあるpythonのサンプルでもLチカはできています。

設定は終わったはずなんだけど…

インストール後に再度ログインするとログイン時にErrorが発生しています。

Linux linaro-alip 4.9.27-linaro-lt-qcom #1 SMP PREEMPT Wed May 10 19:59:33 UTC 2017 aarch64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed May 24 19:26:42 2017 from 192.168.0.7
ERROR: Unable to find libsoc_gpio.conf
cat: /usr/local/etc/libsoc_gpio.conf: No such file or directory
declare -x HOME="/home/linaro"
declare -x JAVA_TOOL_OPTIONS="-Dgnu.io.rxtx.SerialPorts=/dev/tty96B0"
declare -x LANG="C.UTF-8"
declare -x LOGNAME="linaro"
declare -x MAIL="/var/mail/linaro"
declare -x MONITOR_PORT="/dev/tty96B0"
declare -x OLDPWD
declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
declare -x PWD="/home/linaro"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="192.168.0.7 7154 22"
declare -x SSH_CONNECTION="192.168.0.7 7154 192.168.0.8 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="linaro"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SESSION_ID="5"
linaro@linaro-alip:~$

エラーメッセージを確認するとERROR: Unable to find libsoc_gpio.confというエラーが発生しています。libsocの設定ファイルがみあたらないようです。ソースからインストールした時には発生しなようですが、パッケージでのインストールでは発生してしまっているようです。

仕方なくエラーメッセージからググってみると…

discuss.96boards.org

というようなページを見つけました。なければ作れということのようです。 そこで以下のファイルを開いて

$ sudo vi /etc/libsoc_gpio.conf

以下のように編集します。

【/etc/libsoc_gpio.conf】

# board
model = Qualcomm Technologies, Inc. APQ 8016 SBC

# GPIO
# dragonboard 410c pin layout
#<Pin Name> = <SoC Num>
GPIO_A = 36
GPIO_B = 12
GPIO_C = 13
GPIO_D = 69
GPIO_E = 115
GPIO_F = 4
GPIO_G = 24
GPIO_H = 25
GPIO_I = 35
GPIO_J = 34
GPIO_K = 28
GPIO_L = 33

# include mappings by pin number on board
GPIO_23 = 36
GPIO_24 = 12
GPIO_25 = 13
GPIO_26 = 69
GPIO_27 = 115
GPIO_28 = 4
GPIO_29 = 24
GPIO_30 = 25
GPIO_31 = 35
GPIO_32 = 34
GPIO_33 = 28
GPIO_34 = 33

内容としてはGPIOのpinとアサインの設定を記載したファイルになるのだと思います。 このあと再度ログインをするとエラメッセージは消えました。

終わりに

今回もいろいろと迷い路をしていましたが、ようやくDragonBoardでもGPIOが使用できるようになりました。電圧が1.8Vなのが気になりますが、これからまた考えていこうかと思います。

DragonBoard 410c(Debian)の定期的なリブート対策【多分自分だけ…】

DragonBoard 410c(Debian)の定期的なリブート対策【多分自分だけ…】

以前からDragonBoard環境設定をしていて、DragonBoardに入れたDebianが5~10分程度でリブートするという現象が発生しました。長時間のソースビルドなどを行うと必ず失敗していて、ソースからのパッケージビルドなどは無理ゲーなのかと思ったのですがそれが原因でした。何も指定なくてもリブートがかかっています。

2017/05にリリースされた最新版【17.04】を使っていました。そこでダメ元で【16.09】にバージョンダウンしました。

17.04へのリンク builds.96boards.org

16.09へのリンク builds.96boards.org

すると…現象は改善し、どんなに時間が経ってもリブートすることはありませんでした。

うーん

とはいえ、ロケールタイムゾーン、キーマップなどの設定関連がX上からできないので面倒といえば面倒。(debianの設定方法をあまり知らなかったので)

とりあえずは解決したわけですが

バージョンダウンして、一つ気がつくことがありました。

ボード上の青いLEDがバージョンダウンしてから消灯していることです。 この青色LEDBluetoothのPowerLEDです。WiFiのLEDはその隣のアンバー色LEDです。

f:id:ueponx:20170525203706j:plain

これを最新の17.04でも消灯すればもしかしたら現象が改善するのかなと願いを込めて行ってみました。Xのメニューから【Preferences】→【KDE System Settings】を選択します。

f:id:ueponx:20170525203618j:plain

【System Settings】のウインドウが開くのでそのなかから【Bluetooth】を選択します。

f:id:ueponx:20170525203627j:plain

【Adapters】にある【Powered】のチェックを外します。

f:id:ueponx:20170525203638j:plain

画面はチェックを外します。

f:id:ueponx:20170525203648j:plain

最後に【Apply】ボタンをクリックします。

f:id:ueponx:20170525203657j:plain

ボード上のLEDが消えました!大成功です!

あまり長時間のテストをおこなっているわけではありませんが、一応、LEDは消えましたし、かなり安定した印象があります。数分でリブートするようなことはありませんでした。


しかし、・・・

リブートすると青色のLEDは復帰していました。なぜ?

いろいろとさまよった結果、起動時にbluetoothサービスが動作しているのではないか(当然なんですがw)と思ったので、サービスを止めてみました。ここに気がつくまで再インストール10回ほど、半日ほど費やしてしました。

$ sudo systemctl disable bluetooth.service

オッケービンゴ!

再起動しても、BluetoothのLEDは消灯したままでした。


おわりに

ネットの情報では自分のように頻繁に再起動する方はいないようでした。自分のための備忘録としておきます。 でもたまに落ちるみたいです。泣きたい。

DragonBoard 410c(Debian)でNode.jsとPhantom.jsを使えるようにする

DragonBoard 410c(Debian)でNode.jsとPhantom.jsを使えるようにする

※ 結論をお急ぎの方は「まとめ」まで読み飛ばしてください。

先日、「DragonBoard+IoTアプリコンテスト meet up!」というイベントに参加してきました。

algyan.connpass.com

f:id:ueponx:20170521105631j:plain

DragonBoard410cはAndroidLinux、Windows10IoTCoreが動作する素敵系ボードというとだったので、ぜひ触ってみたいと思いました。ハンズオンでは各OSの動作を確認でき、作品制作・発表は必須ということでしたが、ボードがいただけることだったので大満足のイベントです。

f:id:ueponx:20170521105710j:plain

f:id:ueponx:20170521105722j:plain

f:id:ueponx:20170521105729j:plain

自分も、最近はRaspberryPiばかりだったので、いままで作っていたものを移植してみたいなと思っていたのでいい機会でした。

家に持ち帰り、Debianをインストールしようとすると最新版(2017.05.12)が出ているということでしたので17.04をダンロードし、SDカードに書き込んでインストールしました。インストール手順は以下のリンクでOK

Documentation - 96Boards

インストールが完了するとXが起動します。ダウンロード、SDカード作成、インストールまでいれても30分程度で完了するお手軽さがあります。

ネットワーク(WiFi)、キーボード、ロケールタイムゾーンなどを設定すればほぼLinuxとして使えます。

パッケージマネージャーはaptなので定番のコマンドを打ち込みます。

$ sudo apt-get update
$ sudo apt-get upgrade

これで一応OKかと思います。

自分が使いたいのはNode.jsとPhantom.jsなので確認をしてみます。Node.jsは4系がすでにインストールされていたので、少し古いですが、Raspbianにのデフォルト比べればよっぽどいいかとおもいますので、このままにしました。ただ、nodeコマンドではなく、nodejsコマンドになっているので注意(Debianでは恒例?)なのと、npmコマンドはないので新規で入れる必要があります。ただ、apt-get経由ではインストールされないようです。(なぜ?)

以上の点を踏まえて、作業を行います。

$ sudo apt-get install -y nodejs nodejs-legacy
$ wget http://www.npmjs.org/install.sh --no-check-certificate
$ sudo sh install.sh

簡単に説明をすると…

$ sudo apt-get install -y nodejs nodejs-legacy

nodejsコマンドをnodeに変更する処理を行うものです。(Debian系あるあるらしい。)

$ wget http://www.npmjs.org/install.sh --no-check-certificate
$ sudo sh install.sh

こちらの2行で、手動でnpmをインストールします。インストールのshをダウンロードして、実行することになります。

あとは、Phantom.jsのインストールになります。Node.jsのバージョンが微妙かなとなんとなく思い、npmでインストールしようかなと思って以下のように打ち込むと

$ sudo npm install -g phantomjs

エラー発生

ではということで以下を参考に

Build | PhantomJS

ソースからインストールしてみようとしてみたのですが、

$ sudo apt-get install build-essential g++ flex bison gperf ruby perl libsqlite3-dev libfontconfig1-dev libicu-dev libfreetype6 libssl-dev libpng-dev libjpeg-dev python libx11-dev libxext-dev
$ git clone git://github.com/ariya/phantomjs.git
$ cd phantomjs
$ git checkout 2.1.1
$ git submodule init
$ git submodule update
$ python build.py

ビルドをしていると何故か、コンソールが落ちるという現象が発生。(teratermで接続して作業を行っていました。)何回やっても同じ状況になってしまうので、無理ゲーあるいは、負け確定イベントバトルなのかと思っていたら、どうもビルドが落ちているのではなく、OSが数分に一度リブートしている動きをしていました。その後、OSは起動して、数分経つとリブートするループへ。\(^o^)/オワタ

ここまで2日ほど費やしてしまったのですが、aptでパッケージってなかったか?ということを思い出し、試しにやってみました。

$ sudo apt-get install -y phantomjs

あるじゃん。/(^o^)\ナンテコッタイ

とりあえず、数分ごとにリブートはしますが、短時間ならなんとかなる!(無理ゲー臭が漂いますが、なんだかウルトラマンみたいで燃えるシチュエーションだなと思ってきた)

phantom.jsも無事インストールできたので実行してみます。

$ phantomjs
QXcbConnection: Could not connect to display 
PhantomJS has crashed. Please read the bug reporting guide at
<http://phantomjs.org/bug-reporting.html> and file a bug report.
Aborted (core dumped)

んが、core dump。\(^o^)/オワタ

気を取り直して、エラーメッセージを確認します。QXcbConnection: Could not connect to displayとなっているのでdisplay関係のエラー、もしかしたらと思って、X側のコンソールで

$ phantomjs --version
2.1.1
$ phantomjs 
phantomjs>

対話側コンソールが無事に起動しました。原因は(teratermなどの)リモートターミナルで起動していたためのようです。とはいっても、コンソールから動かせないと電子工作系では厳しいことが多いのでなんとかしたいところです。

そこでエラーメッセージからググってみると こんなissuesページがGithubにありました。

github.com

I was able to get phantomjs to start working again by installing xvfb and creating the following script in /etc/profile.d/aliases.sh to ensure the alias takes effect system-wide:

なんとなくxvfbが必要のような記述です。xvfbは仮想フレームバッファのようなので、コンソールからこれを使えば仮想的にディスプレイと接続した状況になるようです。 このissuesの解決方法をつかうことにしました。

$ sudo apt-get install -y xvfb
$ sudo vi /etc/profile.d/aliases.sh

【/etc/profile.d/aliases.sh】を編集

#!/bin/bash
alias phantomjs="xvfb-run phantomjs"
$ source /etc/profile

この作業を簡単にいうと、ログイン時のデフォルトのalias設定にphantomjs="xvfb-run phantomjs"を追加し、設定を読み直したということになります。

phantomjsコマンドのAliasを、phantomjsを起動時に事前にxvfbを起動するというものにしています。

$ /usr/bin/phantomjs
/usr/bin/phantomjs 
QXcbConnection: Could not connect to display 
PhantomJS has crashed. Please read the bug reporting guide at
<http://phantomjs.org/bug-reporting.html> and file a bug report.
Aborted (core dumped)

$ phantomjs --version
2.1.1
$ phantomjs 
phantomjs>

前半部はalias経由しないで実行した場合、後半はalias経由で起動した場合。コンソールでも無事に動作できました。

まとめ

手順1: パッケージインストー

npmがインストールされていない場合

$ sudo apt-get install -y nodejs nodejs-legacy
$ wget http://www.npmjs.org/install.sh --no-check-certificate
$ sudo sh install.sh
$ sudo apt-get install -y xvfb phantomjs

npmがインストールされている場合

$ sudo apt-get install -y nodejs nodejs-legacy
$ sudo apt-get install -y xvfb phantomjs

手順2: phantomjsの設定変更

$ sudo vi /etc/profile.d/aliases.sh

【/etc/profile.d/aliases.sh】を編集し保存

#!/bin/bash
alias phantomjs="xvfb-run phantomjs"
$ source /etc/profile

終わりに

一応、DragonBoard 410cの環境にもNode.jsとPhantom.jsが動作するようになりました。でも、Debianが再起動するのは直ってません。これからどうすれば…。

LoLin製のNodeMCUでMicroPythonのインストールをしてみる

LoLin製のNodeMCUでMicroPythonのインストールをしてみる

前回設定したLoLin製のNodeMCUですが、Arduinoで使用するのはまあ普通かなと思ったので、 少し気になっていたMicroPythonのインストールをして使えるようにしたいと思います。

参考にしたのはこちらになります。ありがとうございます。

ken5owata.hatenablog.com

準備を行う。

基本的な流れとしては

  1. ハードウエアの認識(USBで一度接続できていれば不要)
  2. MicroPythonのファームウエアをダウンロード
  3. ファームウエア書き込みツール(Flash Download Tools)をダウンロード・インストー
  4. ファームウエアの書き込み
  5. MicroPythonの動作テスト

このようになると思います。

最初のハードウエアの認識に関してですが、Window10では特にドライバのインストールを行わなくても認識されますので必要はないかと思いますが、認識されない場合には前回のエントリを参考にしてドライバのインストールを行ってください。

uepon.hatenadiary.com

MicroPythonのファームウエアをダウンロード

下記のサイトからMicroPythonのファームウエアをダウンロードします。

micropython.org

キャプチャ画面は2017/05/20現在

f:id:ueponx:20170520090528p:plain

ページの下の方、Firmware for ESP8266 boardsの項目まで行きます。

f:id:ueponx:20170520090930p:plain

この中から今回は esp8266-20170108-v1.8.7.bin (elf, map) (latest)をダウンロードすることにしました。

ファームウエア書き込みツール(Flash Download Tools)をダウンロード・インストー

ファームウエアをダウンロードしたら書き込みツールで書き込みツールを準備します。 自分はWindowsなのでFlash Download Toolsを使用します。

MacLinuxではesptoolというものを使うらしいです(https://espressif.com/en/support/download/other-tools

espressif.com

キャプチャ画面は2017/05/20現在

f:id:ueponx:20170520084534p:plain

f:id:ueponx:20170520084549p:plain

インストーラー付きが良ければこちら Flash Download Tools V3.4.4 (ESP8266 & ESP32)

ZIPファイルが良ければこちら Flash Download Tools V3.4.1 (ESP8266 & ESP32)

自分はZIP版が良かったのでそちらをダウンロードしています。 ZIPファイルを展開してフォルダを確認し、サブフォルダのなかみを確認すると

f:id:ueponx:20170520160718p:plain

このようにファイルがみえます。 この中のESPFlashDownloadTool_v3.4.1.exeこれを実行することになります。

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

ESPFlashDownloadTool_v3.4.1.exeこれを実行するとこのような画面になります。

f:id:ueponx:20170520085516p:plain

CLIツールのGUIラッパーのようですのでコンソールウインドウも開きます。

画面の中から【ESP8266 DownloadTool】ボタンをクリックします。 DOWNLOADツールの設定画面が開きます。

f:id:ueponx:20170520085829p:plain

以下の設定を変更します。

  • ダウンロードしたファームウエア(保存パス\esp8266-20170108-v1.8.7.bin)
  • 書き込みのアドレス(0x00000)
  • ファームウエアのファイル名の前のチェックボックス
  • SPI SPEED(40MHz → 80MHz)
  • FLASH SIZE(4Mbit → 32Mbit)
  • COM(認識しているNodeMCUのUSBのCOMポート) *BAUD(230400→1152000)

設定すると以下のような画面になると思います。(画面は【START】ボタンを押したあとなので少し異なります。)

f:id:ueponx:20170520160831p:plain

設定変更後は【START】ボタンをクリックして書き込みを行います。ダウンロード中はステータスが【IDLE】から【Download】に変更となり、DETECTED INFOやMACの表示が行われます。

f:id:ueponx:20170520160954p:plain

無事に終了するとステータスは【Download】から【FINISH】に変更されます。

MicroPythonの動作テスト

書き込み成功したら、改めてTeratermなどで接続すると対話形式でmicropythonを無事に実行できます。 ※シリアルのスピードは1152000bpsなどに合わせてください。

f:id:ueponx:20170520091846p:plain

拡大すると

f:id:ueponx:20170520161343p:plain

最初は文字化けしたテキストがでますが、無事にコンソール上MicroPython v1.8.7-7…と表示されています。(Could not open file ‘main.py’ for readingというエラーメッセージが気になるのですが、動作するようです。)

f:id:ueponx:20170520094258p:plain

拡大すると

f:id:ueponx:20170520161531p:plain

参考にしたブログのサンプルコードを打ち込んでみるとエラーはでないので、動作も大丈夫そうです。そろそろLチカも確認したいので、後日確認して、更新しておきたいと思います。Lチカを確認できました。LEDのプラスをD5ピンへ、マイナス側をGROUNDへ接続しています。

f:id:ueponx:20170525210010j:plain

無事にLEDが点灯しているのがわかるかと思います。

おわりに

MicroPythonも使用できるようになりました。小さなケースにいれておいて、出先でpythonを楽しむといった使い方もできそうです。 そういえば、対話型以外はどうするのでしょうか。そのあたりは調べておこうかなと考えています。

そういえばMicoroRubyっていうのも気になりますね。MicroRuby

aitendoで購入したLoLin製のNodeMCUを使ってみる

aitendoで購入したLoLin製のNodeMCUを使ってみる

以前、秋葉原に行ったときにaitendoさんでESP8266モジュールのついたLoLin製のNodeMCUを購入したのですが一度も使わずに片付けていました。 そのころはほとんど開発用のボードはなかったので結構いいなと思っての購入でした。 aitendoさんのページでは以下になります。

www.aitendo.com

今であれば下記のボードのほうがお安いのでいいのかなと思いますが。

www.aitendo.com

所詮、技適はないモジュール搭載品なので今となってはあまり魅力はないかなと思います。 とはいえ、もったいないので無線機能を使わず、Arduinoなどとして使用したいと思います。

ハードウエアを認識する。

ハードウエアとしてはNodeMCU DEVKITと呼ばれるボードのようでした。

https://en.wikipedia.org/wiki/NodeMCUen.wikipedia.org

frightanic.com

基本的にはPCとUSBで接続し、シリアルドライバをインストールしてボードの認識ができれば問題ありません。

USBシリアル変換にCH340チップを使用しているようなので、接続して新しいデバイスとして認識できなかった場合には

www.wch.cn

www.wch.cn

このあたりからドライバを入手してインストールを行ってください。

認識できれば、デバイスマネージャから下記のように認識されます。(USB-SERIAL CH340)

f:id:ueponx:20170513020625j:plain

また、Teratermの接続ダイアログのシリアルポートにも表示されます。

f:id:ueponx:20170513015514j:plain

ArduinoIDEの設定を行い、スケッチを書き込む

シリアルの準備ができたので後はArduinoIDEのボード設定を整えてスケッチを書き込んでいきます。

f:id:ueponx:20170513020345j:plain

ボード設定に関してはESP8266の設定を事前に読み込ませます。

その後、NodeMCU 1.0(ESP-12E Module)を選択します。その他の設定に関してはデフォルトで大丈夫でした。(NodeMCU 1.0(ESP-12E Module)の設定でも問題なく書き込めていました。)

IDEのウインドウの右下に以下のような以下のような表示が出ていました。

f:id:ueponx:20170513021119j:plain

その後、スケッチの書き込みを行うと、かなり時間はかかりますが問題なく書き込めました。本当はLチカをやりたかったのですが、オンボードのLEDがどのPINに接続されているかがわからなかったので、シリアルポートのテストするスケッチで代用しました。(M8266D30MCU2102の方はPIN=16にオンボードLEDが接続さてれているようです)

書き込みが終わると無事に【ボードへの書き込みが完了しました。】と表示されます。

f:id:ueponx:20170513021528j:plain

void setup() {
  // put your setup code here, to run once:
  pinMode(16, OUTPUT);
  Serial.begin(9600);
  Serial.println("Start!");
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("HIGH");
  delay(1000);
  Serial.println("LOW");
  delay(1000);
}

実際にArduinoIDEのシリアルモニタで動作を確認すると

f:id:ueponx:20170513021733j:plain

ちゃんと1秒毎にHIGHとLOWの表示が行われていました。

終わりに

もうArduinoは純正であることに拘らなければ、300円程度で変えてしまうのであんまり意味がないかもしれませんが、折角、無駄にするのも何だったので使ってみました。可能ならMicroPythonなどにも挑戦したいです。

/* -----codeの行番号----- */