grbl1.1+Arduino CNCシールドV3.5+bCNCを使用中。
BluetoothモジュールおよびbCNCのPendant機能でスマホからもワイヤレス操作可能。
その他、電子工作・プログラミング、機械学習などもやっています。
MacとUbuntuを使用。

CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:



*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。


2017年3月22日水曜日

IoTその3:ESP-WROOM-32/Arduino IDEとESP-IDF

先日、秋月でESP32(WROOM-32)を購入しました(1480円)。
ESP32はWifiとBluetoothが内蔵されており、しかもArduinoよりもメモリが多くクロック数も高いにもかかわらず、この小型なサイズと値段というのは驚きです。


ただのモジュールだけなら700円で、


aitendoに売っている専用のピッチ変換基板(295円)や、


さらにもっとシンプルな基板(150円)にとりつければ、1000円以下でWifiもBluetoothも使えるということになります。この場合、USBシリアル接続はついていませんが、一度OTA(無線でアップロード)を書き込んでしまえばUSB端子も不要なので、このほうがシンプルでいいかもしれません。

ちなみにAliExpressだとESP32は少し安いくらいです。
AliExpress.com Product - ESP32 ESP-32S Development Board WiFi+Bluetooth Ultra-Low Power Consumption Dual Cores ESP-32 ESP-32S Board New Arrival
1281円(送料無料)。
秋月のと同じものなのか、一応技適マークがついています。


Arduino IDEで試してみる:
まずは、ESP32用のライブラリをこちらのサイトからインストール。ターミナルで入力ですが、書いてある数行のコマンドをまとめてコピペして実行すれば一気に終わります。

USBシリアル変換ドライバのインストール:
さらに、この秋月のボードの場合はCP2012というUSBシリアル変換チップが搭載されているので、このドライバもこちらのサイトからダウンロード&インストールします。

Arduino IDEでアップロード:
ESP32をUSB接続し、とりあえずBlinkをアップロードしてみることにしました。
設定はこんな感じ(そのまま)。
ESP32ボードの角にGNDがあり、そのとなりに23番ピンがあるので、その二つにLEDを差し込んでみました。そのため、以下のBlinkのコードでは23番ピンをデジタル出力に設定してます。
アップロードスピードが921600もあるせいか、あっというま。


とくに問題なし。リセットボタンなど押してからアップロードかと思いましたが、何も押さなくてもアップロードできました(もしかしたら、開発用ボードだからでしょうか?)。
こんなに便利で安いと、もうArduinoボードを買わなくなりそうです。
ちなみに、この秋月のESP32ボードだと、通常のブレッドボードに差し込むと片側に1列しか余白ができません。サンハヤトのニューブレッドボードであれば一列ずつ幅広(通常5列なのが6列になっている)なので大丈夫ですが、意外に高い。


あるいは、

AliExpress.com Product - Free shipping ESP32-T Shield ESP32-Bit Development Board Compatible For ESP-32S Bluetooth WiFi Module ESP32S Wireless Board788円(送料無料)。このボードに搭載するなら、1列分幅が狭いので、通常のブレッドボードでも両脇1列ずつ余裕ができます。これは、aitendoでも売ってますが(680円)、現在品切れ。

ESP-IDF:さらにESP32について調べてみると、どうやらEspressif公式のESP-IDFという開発フレームワークもあるようです。より細かな設定などは、ESP-IDFのほうがいいかもしれないので、そちらも試してみることにしました。

ESP-IDFのインストール:
このサイトにインストール方法がのっています。基本的にターミナルで入力ですが、手順に沿ってやっていけば大丈夫だと思います。

唯一、パスを通すところが面倒かもしれません。

export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin
この部分ですが、これを不可視ファイルの.profileに記入。.profileは/Users/username/.profileにあるはずです。不可視ファイルなので、今回はFunterを使って可視化してエディタで上記パスを直接書き込みました(vimやemacsをつかえばいいのかもしれませんが、慣れていないので)。Macなら$HOME(Linuxぽい)は/Users/usernameと同じなので、このままでも大丈夫そうです。
パスを記入する不可視ファイルは.bashrcや.bach_profileなどありますが、今回は.profileに書き込みました。
ただ、書き込んだだけではまだパスが通っていないらしく、

source ~/.profile
をターミナルで入力する必要があるようです。
さらに、パスが通ったか確認するには、

echo $PATH
を入力します。そうすると、先ほど追加したパスが出てきます。他のパスも書き込んである場合、複数でてきます。これでパスに関しては大丈夫かと。

あとは、サンプルとなるmyappをgit clone(ダウンロード)して、書き込むという手順ですが、myappがあるディレクトリへ移動し、
cd ~/esp/myapp
などと入力し、あるいはmyappがなくて、examplesのhello_worldで試すなら、
cd ~/esp/esp-idf/examples/get-started/hello_world
へ移動し、

make menuconfig
この↑コマンドを入力すると、青い画面がでてきて、ESP32ボードのシリアルポートを設定します。
矢印キーで移動しながら、リターンキーで決定しつつ、先ほどのArduino IDEでも選んだシリアルポートを以下の欄に書き込みます。


以下の画面で<Save>を選択してリターンキー。

あとは<Exit>で画面から抜け出て、またターミナルの通常の画面に戻ります。
シリアルポートを見つけるにはMacの場合なら、
ls /dev/tty.*
この↑コマンドで出てくるはずです。これででてこなければ、ドライバがインストールされていないか、それともUSB接続してないかということです。
そして、最後に
make flash
このコマンドで書き込みということになります。


/Users/username/esp/myapp/main/main.cがプログラムです。
これをエディタなどで開いて書き直し、
/Users/username/esp/myappのディレクトリへ移動して
make flashを入力すれば、いいというわけです。

とくに複雑なプログラムじゃないかぎりは、Arduino IDEで十分だと思います。Arduino IDEのほうが他のセンサーなどのライブラリも使えるので。
しかし、ESP-IDFにしかないようなサンプルの場合はこちらを使ったほうがいいかもしれません。例えば、ESP32-camera-demoなどのサンプルは個人的に興味あるので、これはESP-IDFを使おうかなという感じです。

PlatformIO:
その後、開発環境について調べてみると、PlatformIOを使うと便利ということがわかり、早速インストールしました。

いろいろとやることが増えて面倒かと思いましたが、PlatformIOはAtomというエディタの上で動くIDEで、使ってみるとかなり便利そうでした。
Arduino以外にもいろんなボードに対応しており、サンプルなどのインポート、シリアルモニタ、ターミナル、ボードへのアップロードが全てひとつでできます。さらに、プラグインでHTMLの表示もできます。
Arduino IDEも以前に比べるとボードの種類も増え、ボードごとに設定などを変えてアップロードするように複雑になってきたので、それほど面倒さはかわらないかもしれません。この際、PlatformIOに変えて使ったほうがよさそうです。
たとえばArduino Unoのプログラムの際、書いているのはC++ファイルなのですが、#include "Arduino.h"があるためか、内容はArduinoで使っているコマンドと同じで、構造もvoid setup()とvoid loop()という感じです。PlatformIOに変えると、途端に全てがC言語っぽくなるのかと思ったら、そうでもありませんでした。いままでと変わらないので、すぐに使えると思います。

一度Arduino UnoやESP8266あるいはESP32にアップロードしてみるところまでやってみれば、使い方はだいたいわかるので、思ったより手間が増えるというわけでもなかったです(Arduino IDEの簡単さとあまりかわりませんでした)。これからは、たぶんPlatformIOを使っていこうと思います。
ハードウェア/ソフトウェアの種類、プログラミング言語の種類などがいろいろ増えて、どれからやればいいかという感じですが、PlatformIOはそれらをまとめてくれるような感じかもしれません。おかげで手段や方法で悩むより、最終的にやりたいことに集中できそうです。


ちなみに、ESP8266でCNCマシンを動かしている例もあるようです。

ESP32ならピンの数も多いし、さらにメモリやクロック数も上で、WifiだけでなくBluetoothもあるので、もしGrblが移植できるのであればワイヤレスそしてIP化がすぐ可能というわけです。たった切手サイズの1000円以下のマイコンでここまでできるというのは、すごい時代になったと思います。近いうちに全ての電化製品にIPアドレスが割り振られてしまうのでしょうね。

関連:
ESP32:Webサーバから外部ファイルを読み込み

2 件のコメント:

  1. CNCマシンに関する興味深い情報を詳細に公開頂きありがとうございます。
    以前から部品加工用にCNCに興味を持って居ますが、狭いマンション暮らしでの設置や音などの問題から実現性に悩んでいます。
    透明アクリルの加工にレーザーはと思ったら、煙や臭いなどそれなりに解決しなくてはならない問題があるようですね。(消炎装置や排煙などの対策コストがアップしますね)
    CNC、レーザー何れにしても静かな住宅地ゆえ、近所から苦情が来そうです。
    家賃が安く、ガレージなど土間のある場所に引っ越したい心境です。

    さて本題
    秋月で販売espressif社製ESP32-DevKitC(v2)のブレッドボードですが、こちらのLピカの写真のタイプ(秋月電子で販売しているEIC801同等品の様子)であれば横に連結が可能かと思いますがいかがでしょう。
    連結したら差し込みの穴位置を確認してみて下さい。多分大丈夫かと。
    連結したら100円ショップのPPシートでもちょうど良い大きさに切って裏に貼り付けて置けばOKです。
    私の場合は見栄えを重視して(^^;)電源1列分は取り外して連結しました。
    裏面には両面テープが貼られているので、切り離す電源ラインとの境をカッターで切っておくのをお忘れなく

    今後も進展を楽しみにしております。

    ※URLは急遽作成。ブレッドボードの連結写真をアップ予定です(^^;

    返信削除
    返信
    1. junoさん、コメントありがとうごさいます。
      いまESP32を差し込んでみたら、たしかにちょうどいい感じになりますね。
      それにしても、あと1列分なのでこのボードを設計するときにブレッドボードのことも考えて欲しかったというのが素直な感想です。あわよくば、これ専用のブレッドボードを2列(計40ピン穴)のピンソケットでつくろうとしていました。
      ためしにつくったら、画像アップしたいとは思いますがw
      また何かあればお願いします。特にESP32やESP8266は最近やり始めたので、応用例などありましたら教えてください。

      削除