2018年11月3日土曜日

esp-wroom-02にEsp-Linkを導入する vol.2

前回(その1)はesp-linkの導入法について説明しました。
今回は、実際に使ってみた感想とか書き込んでいこうと思います。

Esp-Linkに接続する

Wifiのアクセスポイント一覧からespを探して接続します。
僕の場合は、前回他のプロジェクトで書き込んだ設定が残っていたらしく、そのAP名とパスワードで接続しました。
さらにespのipアドレスを調べます。
コマンドプロンプトから"ipconfig"を実行しました。

ipアドレスをブラウザのURLに打ち込むと次の画面が出て来るはずです。

Espをインターネットに接続する

このままだとメインPCがインターネットに接続できず、作業上不便なので設定をいじっていきます。
まずはmDNSを有効化します。
まずはトップページのSystem overviewにある"Hostname"を"arduino"へと変更します(これがmDNS名となります。arduinoにしたのは後々ArduinoIDEから扱えるようにするためです)。
次に、mDNSのService名を変更します。ServiceタブのmDNSにある"Enable mDNS"にチェックを入れ、"Service Name"を"arduino"へと変更してください(上と同様にArduinoIDEから扱うためです)。
最後に、espをLANへと接続します。
まずはSTA+APモードに変更。
すると次の画面が出るはずです。WifiのAPを選んでパスワードを入力し、Connectをクリックしました。

ブラウザ上でESPのシリアルを触る

さて、本命の一つであるシリアルの無線化を試してみましょう。
幸い、esp-linkではブラウザ経由でシリアルを書き込めるので、それをやってみようと思います。

まず、ESPから出力されたシリアル信号をパソコン側で受信するために、ESPとPCをUSB-シリアル変換で接続します。
そして、シリアルを送受信できるソフトウェアを立ち上げましょう。

続いて、実際にブラウザからシリアルを送ってみます。
まずは、左のメニューから「μC Console」をクリック。

この画面からシリアルを送ることができます。
実際の映像がこちら。
ブラウザで送信してるときの方はほぼ遅延がないので、ブラウザで受信のときに遅延してるのはhttp関連の遅延なのかな、と思ってます。真偽は不明。

ローカルからESPのシリアルを触る

後で書く。com0com(https://sourceforge.net/projects/com0com/)とか使えばよさそう。

最後に

次回はArduinoIDEから扱う編をやりたいと思います。


2018年10月6日土曜日

esp-wroom-02にEsp-Linkを導入する

どうも皆さんこんにちは、二連続で記事を書いているmokerです。

さて、タイトルの通り、Esp-Linkを導入してみようというお話です。
全然日本語のソースが見当たらないので一応書いておきますが、英語読めるならそっちの方がいいと思います(当然ですが)。
ESP-WROOM-02のファームウェア書き換えは電波法に抵触する可能性も指摘されていますので、実行は自己責任でお願いします。


esp-linkについて

次のようなことが実行可能だそうです。
  • ESPのシリアルをwifi経由でいじる。
  • Wifiを用いて、ESPのシリアル経由でAVRなどにプログラムを書き込む。
  • HTTP経由でアップロードしたプログラムをESPに接続されたAVRに書き込む。
  • 接続されたマイコンをインターネットへ接続させる。
  • 接続されたマイコンをwifi経由で操作するUIとなる(一部未実装)。
今回は主に上2つを実行するために書き込んでみました。

全体としては、結構ドキュメントもしっかりしている上に、バイナリも提供されていてかなり扱いやすいと思います。
ただ開発環境がオフィシャルの提供してるやつで、arduino ideとかで製作されてるわけではないので、そこがちょっと僕にとってはいじりにくいポイントです。


書き込んでみる


基本的にはFLASHING.mdを読んでその通りに実行すればうまくいくと思います。
久しぶりにファームウェアの書き換えやったのでそのメモも含めて残しておきます。
環境はWindows10です。

①ダウンロード

リリースからバイナリをダウンロードします。
ダウンロードするのは、source codeではなく、esp-link-v3.x.xx-xxxx.tgzみたいなやつです。
編集時点ではトップに乗っているのがアルファ・リリースだったので注意してください。

②展開

Windowsでtgzを扱う場合、何が正攻法なのかよくわかりませんが、僕は7zipを使って展開しました。多分いろいろソフトがあると思うので適当に選んでください。

③ESPの接続

ESPをシリアル・アップロードモード(実行モードじゃなく)に設定したうえで、PCに接続します。詳しくはこちら:https://ht-deko.com/arduino/esp-wroom-02.html

④書き込みソフトの立ち上げ

ArduinoIDEにespをインストールしている以上、どこかにesptool.pyがあるとは思うのですが、探すのも、コマンドオプションを調べるのもめんどかったのでGUIツールを公式からダウンロードしてきます:https://www.espressif.com/en/support/download/other-toolsの「Flash Download Tool」
起動して、esp8266を選択。

⑤書き込み

オプションは下の通り。
それぞれダウンロードしてきたバイナリファイルと、書きこむ番地を選択します。
  • boot_v1.x.bin : 0x00000
  • blank.bin : 0x3FE000
  • esp_init_data_default.bin : 0x3FC000
  • user1.bin : 0x01000
あとはFlashsizeを自分のやつ選んで(ぼくは32mbitでした)STARTをクリック。

⑥再起動

ESPを実行モードにして、再起動。そうするとwifiのAPに出てくるはずです(なぜか僕の場合は、前回書きこんだwifiの設定がそのまま残ってました)。
ipconfigとかでAPのIPアドレス調べて、そのアドレスをブラウザで開きます。
esp-linkというタイトルのページが出てくればオーケー。

というわけで導入編はこんな感じです。そのうち使ってみた感想を別記事で書くと思います。

Arduinoでシンボリックリンクをライブラリとして使う(Win10)

みなさんお久しぶりです、Mokerです。
忙しさも少し落ち着いたので前回の続きを書いていきたいと思います。

さて今回書くのはタイトルの通り、win10においてシンボリックリンク経由でライブラリを参照できるよっていうお話です。

前回書いた通り、Arduinoでは原則としてライブラリは、ソフトウェア全体で共通のディレクトリか、そのプログラムと同じ階層のsrcフォルダの下(直下でなくてよい)に配置する必要があります。
しかし、この仕様はプロジェクトごとにライブラリを分けたいという場合に少し不便です。
なぜなら、プロジェクトフォルダに共通のlibフォルダを作っても、Arduino側から参照できないからです。

そこで、解決策として今回発見したのがシンボリックリンクを作るやり方。
プロジェクトのlibフォルダに対するシンボリックリンクを.inoファイルと同じ階層に「src」という名前で作っておくと無事参照することができます。

シンボリックリンクの作り方かたは次を参考にしました:http://www.wannko.net/windows10/etc/sinlink.html
うちの環境では、シンボリックリンク作成の際に管理者権限を要求されました。

これでArduino全体のlibフォルダを汚染することなく、プロジェクト全体でlibを共有することができるようになりました。
もしかしたら、srcという名前のシンボリックリンクを直接作るのではなく、srcというディレクトリを作っておいてその直下にcommonとかいう名前でシンボリックリンクを作る方が使い勝手がいいかもしれません(未検証)。

というかArduino用のプロジェクト管理ソフトって何かお勧めないですかね・・・?

2018年9月19日水曜日

Arduinoでサブディレクトリからライブラリを読み込む

こんにちは、mokerです。

今回はタイトルの通りサブディレクトリのライブラリを読み込む方法についてです。
ちょっとした自作ライブラリを作ったのですが、「共通のlibraryフォルダに置いたり、ArduinoIDEに読み込ませるほどでもないな・・・」ということでサブディレクトリに配置したいと考えました。

検索したところ、日本語でヒットするのは、こちらのページ:Arduino用スケッチのサブルーチンをサブディレクトリに配置する: 猫にコ・ン・バ・ン・ワ

なるほどと思い、次のようにディレクトリを作成(思えばここで素直にサイトに従っておけばよかった)。
┬hogehoge.ino
└lib
 └HogeLib
  ├HogeLib.h
  └HogeLib.cpp
 hogehoge.inoで「#include "lib/HogeLib/HogeLib.h"」とするとヘッダファイルは読み込まれました。
しかし、「Undefined referrence to HogeLib(int, int, etc)」というエラーが発生。つまり、cppファイルが読み込まれていないようなのです。

いろいろ調べてみると原因はこれ:Copy whole sketch source into temp folder to allow local inclusion by cmaglie · Pull Request #172 · arduino/arduino-builder · GitHub
つまり、hogehoge.inoと同じフォルダにsrcというディレクトリを作成し、その下にcppを配置しないとコンパイル時に読み込まれないようです(src直下じゃなくても大丈夫っぽい)。
そこで、次のような構造にしたらうまくいきました。
┬hogehoge.ino
└src
 └HogeLib
  ├HogeLib.h
  └HogeLib.cpp
keywords.txtは反応してないような気もしますが、普段使うのはvsCodeなのでまあどちらでもいいか、という結論に達しました。

<余談>
Arduino一時期触ってなかったので知らなかったのですが、1.5でライブラリ関連は前方互換が途絶えてるんですね・・・。
Githubにまとめられてました:Arduino IDE 1.5: Library specification · arduino/Arduino Wiki · GitHub
日本語だとこことか良くまとまっててよかったです:Arduino開発環境用の「ライブラリ」を作成してみる | KEI SAKAKI's PAGE.

2018年9月13日木曜日

GCEで無料でサーバーを立てるために頑張ったお話

お久しぶりです。mokerです。
さて、今回はタイトルの通り、Google Compute Engine(以下、GCE)を、Google Cloud Platform(以下、GCP)の無料枠の範囲内で使ってサーバー化してみようというお話です。

まずは、アカウントを取得します。ここは特に問題なかったので省略。

いよいよGCEのセットアップをしていきます。
参考にしたサイトはこちら:
GCE の無料枠のサーバを立るときに、初見でハマりそうなところ - Qiita
ちょこちょこ無料枠の制限が複雑なところがあるので注意が必要です。
後、ネットワーク関連の設定は、GCPのハンバーガーメニュー > ネットワーキング > VPCネットワークから設定可能です(最初見つけられなかった)。
OSはDebian9 (Jessie) を選択。
SSHのrestartがsystemctlコマンドで出来なかった(後から気づいたけどsudoしなかったせいかも)ので、「sudo /etc/init.d/ssh restart」から実行してます。
エディタはnanoを使いました(初心者に優しくて好き)。
rootのパスワード設定について一切かかれてないけどやっておいた方がよさそうな気がします。

SSL設定の前にまずNginxサーバーを立てます。
参考にしたのはこちら:Debian 9 (Stretch) - Web サーバ Nginx 構築(Nginx 公式リポジトリ使用)! - mk-mode BLOG
(ちなみにこのサイト、右クリックが無効化されてました。何故・・・?)
必要なところではsudoを忘れずに・・・(Nginxコマンドが認識されずに焦った)。
Nginxの設定は、ServerTokensとlocationを変更しました。

さて最初の参考記事に戻ってSSLの設定をしていきます。
certbotは面倒なことしなくてもapt installからいけるっぽいです。
SSL証明書を取得出来たら、Nginxにそれをインストールします。
なんだかんだうまくいかず、結局httpsへのリダイレクトは行わないで、sslの設定もdefault.confに書き込みました。
これで無事httpsでアクセスできるようになりました。

<後記>
sshがすごく重たくて、とってもストレスがたまりました・・・
レイテンシなのか、それともteratermなのか分からずじまい


2018年6月23日土曜日

Twitterの開発者用アカウントを取得したお話(順次追記)

Twitterの開発者用アカウント(Twitter development account)の取得に挑戦したので、その記録をしておこうと思います。
誰かの参考になれば幸いです。
ちなみにdev accountをとったのは、Activity Acount APIを使ってみたかったからです。

2018/6/9 14:30
dev accountの申請を送りました。(うっかりスクショを取り忘れました)
特段書くべきことはないですが、「なぜアカウントをとりたいか」だか「どんなアプリを開発してるか」だか(どっちだったか忘れた)を最低300文字の英文で説明しなければなりません。作文です。これが結構大変でした(英弱)。

2018/6/11 23:00
twitter dev teamから英語でメールが届きました。
内容としては、「お前は複数のアプリ開発してるけどトークン使いまわしてるんじゃねえよな?一応それぞれのアプリの説明をメールの返信でくれ。もしくはアプリを1つに絞って作業完了報告メールを返信しろ」みたいな感じです。

2018/6/13 1:00
仕方ないので、使ってなかったアプリを削除、使用中のアプリケーションについては説明を英語で返信しました。

2018/6/15 5:40
twitter devから英語でメールが来ました。内容は「お前の申請通ったぞ」とのことです。

2018/6/16 20:00
メールが来ていたことに気づき、twitter devのマイページを見に行きました。
が、「You are on the waitlist」(申し込み審査中)と表示されたままでした。

2018/6/17 12:30
仕方がないので、来ていたメールに「まだ審査中って出るんだけどどうなってんの?」って英語で返信しました。

2018/6/23 13:00
メール帰ってこないのでどうすべきか悩み中です。
開発者向けの窓口もよく分からんっていう

2018/7/28 1:40
Twitter APIの厳格化が発表されたので、自分のdevページを見に行ったら通ってたっぽい・・・です。
ちょこちょこ確認してたので許可下りたのはつい最近だと思われますが・・・
何がきっかけだったのかは正直謎

2018年5月27日日曜日

Waves full nodeを立ててみた(が失敗した)

お久しぶりです。
前回のくっさい記事を早く過去のものとするためにとりあえず新しい記事を書いておこうと思います。
Wavesというのは、ブロックチェーンを用いて自分のトークン/アセット(仮想通貨)を発行できるサービスです。
そのブロックチェーンのノード(トランザクションを実際に処理しているサーバー/コンピューター)を立てれると聞き、実際に試してみました。
実際のやり方は、https://dekirukigasuru.com/blog/2017/08/25/waves-fullnode/や、https://docs.wavesplatform.com/waves-full-node/how-to-install-a-node/how-to-install-a-node.htmlを参照することをお勧めします。
今回の記事はあくまで記録用です。


さて、まずRaspi1B(revision2)で試してみました。
OSはstretch,javaはインストール済みでした。
Raspi3Bでの動作報告が掲示板で上がっていたので楽勝だと高をくくっていたんですが、コンフィグをいじって実際に起動してみても、APIを返してくれません。
journalctlコマンドでログを確認してみるとどうやら1分おきぐらいにJAVAがエラーを吐いて、プロセスを再起動していることがわかりました。
いまだに原因は不明なんですが、考えられる理由として32bitアーキテクチャだからということがあります。
実は公式のマニュアルをしっかりと読むと64bitで実行してくださいって書いてあるんですよね。しかも、Raspi3Bは64bit、Raspi1Bは32bitなんですよ・・・


というわけでRaspiでの実行はすっかり諦め、WSLのDebianで実行してみました。
まずは、同様にインストールして実行します。
すると以下のエラーが出ます。
>>sudo systemctl start waves.service
Failed to connect to bus: No such file or directory
調べてみるとどうやらWSLではsystemctlが使えないとのことです。
代わりにsystemコマンドを使ってみます。
>>sudo service waves.service start
waves.service: unrecognized service
???
systemctlが使えないせいでインストールがうまくいっていないのでしょうか?
いやー困った...


とここまで作業して気づいたんですが、どうせWSLで動かすならwindowsで動かせばいいじゃん!ということで、また今度win10へのインストールを試みようと思います。(疲れた)
PS:今回初めてhighlight.jsなるものを使ってみました。ぶっちゃっけシンタックスハイライトいらない内容だけどね!