全体表示

[ リスト ]

これまで Arduino nano を使って、GPS受信情報の表示や
タイマーレリーズと同じような動きをするところまで作り込みました。

しかし、Arduino UNO/nano互換機に使われているUSB-シリアル変換チップ(CH340)の
Mac用ドライバがとても不安定で、頻繁にカーネルパニックを起こしたり、
USBハードディスクを認識しなくなるので、MBP 15'(late2013)を
MacOS X 10.9から10.13にアップデートをしたのを機に開発を中断していました。

このCH340用ドライバはMacOSとの相性の悪さが数多く報告されていますし、
最近のMacOSではインストールすら出来なくなっているとの情報もあります。
大昔のパソコンソフト開発のようにソフトが暴走したらリセットして再起動する、
なんて時代に逆戻りはしたくありません。
プログラム開発を終えて、プログラムを焼きこむだけならCH340を使った互換品でも良いのですが、
開発中はUSB-シリアル変換を使ってプログラムを転送したり、
デバック情報を出力するに頻繁に使用するので安定性は重要です。

イメージ 1
写真1. Arduino UNO/nano互換機

Arduino nanoは小さいので気に入っているのですが、フラッシュメモリやSRAMが少なく、
これ以上複雑なプログラムを動かすことは難しいと感じていました。
そこでメモリ多くて、USB-シリアル変換に問題がなさそうなものを幾つか取り寄せてみました。

・Arduino MEGA 2560
CPUにATmega2560、USB-シリアル変換にATmega 16U2を使っており、
こちらもMacOSではドライバのインストールなして使用できます。
フラッシュメモリは256KB、SRAMは8KBに増量されており、
入出力ピンが大幅に増やされています。
互換品にはCH340を使用したものがあるので注意が必要です。
・Arduino Pro micro
CPUがATmeg32U4で、USB-シリアル変換を内臓していて、
MacOSではドライバのインストールなして使用できます。
フラッシュメモリはnanoと同じ32KBですが、
SRAMは2KBから2.5KBに増えています。
SRAM不足に悩んでいたので512バイト増だけでも有難いです。
・ESP8266
CPUはTensilicaの32ビットRISCプロセッサ(80MHz)で、
USB-シリアル変換にSilicon Lab のCP2102が使われており、
MacOSではVCPというドライバをインストールする必要があります。
フラッシュメモリは4MBで、SRAMは96KBもあり、
Wi-Fiモジュールが搭載されています。

イメージ 2
写真2. Arduino MEGA2560/Pro micro, ESP8266

Arduino IDEの環境を整えて3種類のボードでLEDの点滅のスケッチを使って
動作することを確認しました。

最初に届いたのがESP8266だったのでESP8266を使い始めました。
Arduino MEGA2560と Pro microはは、まだ殆ど触っていません。

イメージ 3
写真3. ESP8266

まず基盤上のシルクとスケッチ上のデジタルピン番号が一致していないことに戸惑いました。
LEDを点滅させるスケッチでGPIOの番号を変えながら調べたところ
次のようになっていました。

スケッチ 基盤上(シルク)
GPIO 0 D3(FLASH)
GPIO 1 D10(TXD0)
GPIO 2 D4(TXD1, on-board LED)
GPIO 3 D9(RXD0)
GPIO 4 D2
GPIO 5 D1
GPIO6〜11(未接続)
GPIO 12 D6
GPIO 13 D7(RXD2)
GPIO 14 D5
GPIO 15 D8(TXD2)
GPIO 16 D0(on-board LED)

GPIO 6〜11はピンヘッダに引き出されていないようです。
(フラッシュメモリに接続されているとの情報あり)

他にも予約ピンでLEDが点灯するものがあるのですが、調査していません。

まずはI2Cを使ってRTC(リアルタイムクロック)の設定と読み出しを行おうしたのですが、
GPIO 5と4を使う標準的なWire接続では正しく時刻を読み出せる時と、
誤った時刻になることがありました。
Wi-Fiの電波に干渉しているのかもと疑い、別のGPIOに変更してみたところ、
SDAをGPIO 4から2に、SCLをGPIO 5からGPIO 0で解消しました。
電波の干渉の問題ではないような気がします。
またRTCから1秒毎に信号(SQW)を出して、これを外部割り込みとして接続し、
時刻をカウントしているのですが、これをGPI0 5 (D1)やGPIO 4(D2)に繋ぐと
スケッチが起動したり、起動しなかったりすることがありました。
GPIO 5, 4(D1, D2)はブート時に外部からHighにされていると問題があるようです。
こちらはGPIO 14(D5)に変更することで意図した動作になりました。
GPIO 16(D0)以外は外部割り込みに使用可能という情報は得ていたのですが、
それはブートした後の話しのようです。

また、Arduino nanoと同じようにI2CにRTC、OLED、9軸センサ、
UARTにGPS、そしてロータリエンコーダ・スイッチを繋ごうとしたのですが、変更が必要でした。
UART0(GPIO1, 3)はUSB-シリアルに繋がっているので、
開発時は常に出力があるGPSの接続には使えません。(スケッチのアップロードに失敗する)
GPSモジュールのTX,RXをそれぞれGPIO 12(D6), 13(D7)に接続しました。

ESP8266はArduino nanoに比べて使えるGPIOが少なく、隠れた接続制限もあるので
センサ類を沢山接続して使いたいような用途には向いていないかもしれません。
また、ソフトウェア・ウォッチドック・タイマ エラーにも悩まされました。
Wi-Fiのために定期的に制御をシステムに渡す必要があり(loop関数を抜けるか、yield関数を呼び出す)、
ユーザプログラムの処理で長時間占有してはならないらしいのですが、
Arduino nanoではそんな必要なありません。

入門用と位置づけされているArduino UNO/nanoに比べて、
ESP8266は高機能なのですが初心者向けの情報が少なく、敷居が高いように感じました。

この記事に

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

開く トラックバック(0)


.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事