趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • 【すごい】ESP8266がArduino IDEでサポートされる

    投稿日 2015年 3月 30日 4個のコメント

    いつものように、Hack a Dayの記事から。

    タイトル(「ARDUINO IDE SUPPORT FOR THE ESP8266」)だけ見ると、ESP8266をEthernet Shieldとして使えるようになったのかな、と思ってしまうところですが、そんな当たり前の話じゃありません

    『ArduinoでESP8266がサポートされた』のではなく、『Arduino IDEでESP8266がサポートされた』のです。言い換えると、ESP8266単体で動かすIoTアプリケーションの開発がArduino IDEでできるようになったということなのです。(github上のサンプルプログラムにはIoTのプロトコルであるMQTTのサンプルも載っています)

    ESP8266の内部のXtensaプロセッサをArduino IDEがサポートするようになり、ESP8266モジュールだけでArduinoのpinMode(),digitalRead(),digitalWrite(),analogRead()が使える上に、WiFi機能をEthernet Shieldと同様に使えるようです。一方で、PWMはESP8266自体がハードウェアリソースを1chしか持っていないので制約があり、SPIとI2Cはまだ動作しないようです。

    すでに github から Linux(64bit)、Windows、OS X用のArduinoコンパチのIDEがダウンロードできるようになっていて、サポートしている機能の範囲も同じところに書かれています。(Linux版をダウンロードしてみたら70MB以上ありました・・・)

    ESP8266の書き換えは、Hack a Dayのこちらの記事にあるような簡単な回路でできるようです。

    IDEの安定性次第のところはあるかもしれませんが、安定して使えるようになればこれは間違いなく大ブレイクすると思います。これで無線や電子工作に詳しくない人でもArduinoでマイコン制御機器を作ってみるのと大して変わらない感覚で、ESP8266を使ったIoT機器を作ってみるということが可能になるのですから。

    おそらく、Espressif社はWiFiを使ったIoT機器用のチップとしては数量でNo.1になっていくのではないでしょうか。(ちょうど、BluetoothでCSR社が占めているような立ち位置になるんじゃないかと予想します)


  • 今度はBeagleBoneBlack + Arduinoが登場?

    投稿日 2013年 10月 5日 3個のコメント

    またHACK A DAYの記事からですが、インテルアーキテクチャのArduinoに続いて、またArduino関連で新しい話がでてきました。

    どうも、BeagleBone.orgとArduinoのコラボレーション・・・ということらしいのですが、Arduino Treというのが2014年4月に登場するみたいです。

    (写真はArduino.ccからの借用です)

    内容はArduino+BeagleBoneBlackのようで見たまんまみたいです。

    Arduino側はATmega32u4 16MHz、BeagleBone側はAM3359(Cortex-A8) 1GHz+DDR3 512MBとのこと。

    ネットワーク通信と負荷のかかる演算処理はCortex-A8側で、リアルタイム性の要求される制御や現存のArduinoのシールド資産を使った制御はArduino側で、ということでしょうね。

    気になるのはお値段です。Arduinoはハードウェアとしては大した回路ではなく、両面基板でも実現容易な部類なのですが、BeagleBoneBlackの方は(電子工作向けとしては)かなりの高スペックな基板・・・確か6層の微小スルーホール仕様だったと思います。BeagleBoneBlackはサイズを徹底的に切り詰めている感じでしたが、こちらではそれを結構大きなサイズで使うのでお値段も安くなさそうな気がします。

    あとは、BeagleBoneBlackの方は、もうちょっとOSの方がなんとかならないかと・・・(^^;


  • インテルアーキテクチャのArduino登場!!

    投稿日 2013年 10月 4日 コメントはありません

    HACK A DAYのこの記事で知ったのですが、インテルがローマのMaker FaireでArduinoとハードウェア(シールド)およびソフトウェアコンパチブルの開発ボードを発表したようです。その名も「ガリレオ(Galileo)」。

    (画像は Arduino.cc からの借用です)

    本家arduino.ccの記事によると、ボードとしてのハードウェアスペックはこんな感じみたいです。

    • Atomプロセッサよりもさらに小さな(=低コスト、低消費電力)Quarkという400MHzの32bit Pentium相当のCPUコアを搭載。
      Quarkについては9月に行われたIDF(Intel Developper Forum)で発表された組み込み向けのプロセッサの模様(参考記事
    • オンチップの16KBのL1キャッシュ、512KBのSoC内蔵SRAM(いわゆるスクラッチパッドでしょう)
    • Fast Ethernet(10/100M)
    • PCI-Express ミニカードスロット
    • USB2.0 ホストコネクタ
    • USB2.0デバイスコネクタ(Arduinoとしてのプログラミング用)
    • JTAG
    • リセットボタン
    • 8MBのSPIフラッシュメモリ
    • 32GBまでのMicroSDHCコネクタ
    • 11KBのEEPROM

    Arduinoとしては、

    • シールドがそのまま使える(細かくはI2Cのスレーブが使えないとかあるみたいですが)
    • アナログ、デジタル(PWM含む)の端子はそのまま使える模様
    • digital 1ピン、2ピンのシリアル(UART)も使える
    • Arduinoの開発環境からボードとして「Intel Galileo」を選択すると、Arduino IDEの開発環境でそのまま使える
    • スケッチがボード上の不揮発メモリに残っていれば電源ONで動作する(Arduinoも同じですね)
    • 電源は5V入力で、ACアダプタの定格としては3Aを推奨。
      一見大食いですが、3.3V、5Vの各ピンの電流として800mAという記載があるので、その分を含んでいるのでしょう。

    というところで、Arduinoっぽいものを目指しているのではなく、Arduinoとの高い互換性を狙っているように見えます。

    インテルはこのボード(Galileo)を大学向けに5000枚ほどバラ撒くようです。(参考記事

     

    ・・・・で、感想です。

    今ある情報だけではソフトウェアの構成がいまいちわかりませんが、単なるArduinoの領域に400MHzのPentiumはオーバースペック過ぎるように思えます。当然インテルもわかっているでしょうが。ただ、ロボット関連などでは結構な演算性能が求められるはずなので、必要な分野もあるだろう、ということでテストマーケティングに投入する(寄付する)のでしょう。

    そして興味深い(期待したい)のは、今後、どの分野に展開していくかです。

    今時、ネットワークおよびネットワークに関連する機能(http,smtp,ftp,cifs,…)は様々な機器(お遊び含む)で求められるので、それをお気楽お手軽に実現するための基盤としてLinuxをみんな使う(使いたい)わけです。だから安価で環境の整っているRaspberryPiやBeagleBoneに興味を示す人が多いわけです。

    となると、Galileoボードは安価に市販されるのか、Linuxは動作するのか、というところが注目したいところです。Pentium 400MHzクラスであれば、GUIは別にしてLinuxでもBSDでも問題なく載るはずです。そこに膨大なArduinoシールドの資産を使うと、いろんなものが作れる(作る人がいる)のではないか、と思うのは自分だけではないはずです。

    BeagleBoneBlackが49ドル、RaspberryPiが35ドルで販売されていることを考えると、60ドル以下、できれば50ドルを割る価格で販売してくれないかな~、と思うんですが、どうでしょう、インテルさん。70ドル以上ではAndroidとRaspberryPiで爆進するARM版Linux・・・このままではいずれ(すでに?)組込み分野で席巻することになるでしょう・・・の勢いは止められないと思いますので。

    いずれにせよ、今後に注目です。


  • AVR関連小物工作

    投稿日 2013年 7月 16日 コメントはありません

    久々にハンダごてを握ってみました。

    今回作ったのは最小Arduinoを基板化したもの2つと、AVRISP mkIIでATmega328pにブートローダを書き込むためのアダプタ、最小Arduinoでプログラムをダウンロードするためのアダプタの4つです。

    DSC_0218

    左から AVRISP mkII 、ブートローダ書き込み用のアダプタ、最小Arduino×2個です。
    すべて秋月の小型のユニバーサルボードの上に組んであります。電源はACアダプタとかを使うのが面倒なので、電池1本を含めてオンボードでHT7750A(ブートローダ)やHT7733A(最小Arduino)を載せてあります。コンデンサやダイオードはチップ部品で裏面に実装してあります。上方の8pinのコネクタはSPIです。

    DSC_0219

    そしてこちらが最小Arduinoに書き込み・デバッグをするためのアダプタで、写真のような感じでデバッグ・書き込みを行います。ATmega328pをICクリップでつまんで接続しますが、11~18pinは書き込み・デバッグには不要なので20pinのICクリップで済ませています。(秋月で売っている28pinのICクリップはワイドタイプ用なので、ナロー28pinには向かない、というのもあります)

     

     


  • 改めて最小Arduinoを作ってみた

    投稿日 2013年 6月 3日 コメントはありません

    SPIを2台で動かしてみたいということがあり、手っ取り早いのはArduinoということで、最小構成のArduinoを2台仕立てる準備をしています。今回のホストの環境は lubuntu13.04で、Arduino IDEは1.0.5です。

    昔の方法に沿って試してみます。マイコンボードは Arduino Pro or Pro Mini(3.3V,8MHz) w/ATmega328 を選択し、書き込み装置はAVR ISP mkII を選択して、ブートローダの書き込み操作をします。・・・が、一般ユーザーではブートローダの書き込みがうまくいかないようです。groupsコマンドで自分(ユーザー)がdialoutグループに所属しているか確認し、所属していなかったので追加、さらに、/etc/udev/rules.d/40-permissionsに以下の記述を実施。

    SUBSYSTEM!="usb_device", ACTION!="add", GOTO="avrisp_end"
    
    # Atmel Corp. JTAG ICE mkII
    ATTR{idVendor}=="03eb", SYSFS{idProduct}=="2103", MODE="660", GROUP="dialout"
    # Atmel Corp. AVRISP mkII
    ATTR{idVendor}=="03eb", SYSFS{idProduct}=="2104", MODE="660", GROUP="dialout"
    # Atmel Corp. Dragon
    ATTR{idVendor}=="03eb", SYSFS{idProduct}=="2107", MODE="660", GROUP="dialout"
    
    LABEL="avrisp_end"

    とした後、

    $ sudo restart udev

    としてもダメ。再起動してもダメ。面倒なので、ブートローダの書き込みの時だけarduinoの起動でsudoしてしまいました。

    <おまけ>ブートローダを書き込むと、19ピンに接続したLEDが点滅するようです。

    その後、セラロック無しで動作させるため、ヒューズビットを書き換えます。
    具体的には「# sudo avrdude -c avrisp2 -p m328p -P usb -t」としてターミナルモードを起動し、「>>> w lfuse 0 0xe2」としてヒューズビットを書き込みます。書き込み後はセラロック無しで電源ONしなおしてもLEDは点滅しました。

    DSC_0006


  • 環境情報をRaspberry PiでTweetしてみる

    投稿日 2012年 9月 16日 コメントはありません

    いろいろネタが揃ってきたので、 Raspberry Piで環境情報をつぶやかせてみることにしました。

    まず、環境を取得するハードウェアは、以前作った気圧計・温湿度計を使います。LCDの表示がついていますが、とりあえずはそのままにしておきます。Arduinoベースのこの気圧計・温湿度計は、5秒ごとに気圧、温度、湿度を測定し、9600bpsでUSBシリアルに送信してきます。

    続きを読む »


  • PythonでUSBのパイプを扱う方法

    投稿日 2012年 7月 18日 コメントはありません

    Pinguino(PICマイコンでArduinoのようなことをするもの)について調べていたら、

    http://wiki.pinguino.cc/index.php/Interfacing_with_Python

    にUSBのパイプをPythonで扱う方法が出ていた。

    PinguinoではUSBでホストとのデータ送受信ができるようであり、そのための例として載っている。
    (ちなみにPinguinoは秋月で売っている PIC32MX220F032BのQFP44ピンバージョンであるPIC32MX220F032Dを搭載したバージョンがOLIMEXから販売されている)

    ここによれば、

    On Computer Side

    #!/usr/bin/env python
    #
    import usb
    busses = usb.busses()
    # Search pinguino between all the usb devices
    for bus in busses:
      devices = bus.devices
      for dev in devices:
        if dev.idVendor==0x04d8 and dev.idProduct==0xfeaa:
          pingu = dev
    # Get a device handler for th usb device
    dh = pingu.open()
    # Set configuration 3 an interface 0
    dh.setConfiguration(3)
    dh.claimInterface(0)
    # Read 5 bytes in Bulk mode, convert them to 
    # a string and print it
    while 1 == 1: 
      cadena = ""
      for i in dh.bulkRead(0x82, 5, 10000):
        cadena += chr(i)
      print cadena

    という簡単な記述で扱えるらしい。

     


  • Mega644版Arduino(Sanguino)・・・アナログ編

    投稿日 2011年 8月 16日 2個のコメント

    次にアナログ入力を試してみたのですが、サンプル「AnalogInput」をコンパイル&実行しようとしてみると、エラーが発生します。

    エラーの原因は

    int sensorPin = A0

    の行で、「A0」が未定義ということのようです。で、元からある arduino-0022/hardware/arduino の下のファイルと、追加した arduino-0022/hardware/sanguino の下のファイルを見比べてみると、WProgram.h のファイルにA0~A15の設定が抜けていることがわかりました。

    そこで、arduino-0022/hardware/arduino/cores/arduino/WProgram.h から以下の部分のうちの黒字部分と、ATmega644Pの記述(赤字の部分)を追加しました。

    #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    const static uint8_t A0 = 54;
    const static uint8_t A1 = 55;
    const static uint8_t A2 = 56;
    const static uint8_t A3 = 57;
    const static uint8_t A4 = 58;
    const static uint8_t A5 = 59;
    const static uint8_t A6 = 60;
    const static uint8_t A7 = 61;
    const static uint8_t A8 = 62;
    const static uint8_t A9 = 63;
    const static uint8_t A10 = 64;
    const static uint8_t A11 = 65;
    const static uint8_t A12 = 66;
    const static uint8_t A13 = 67;
    const static uint8_t A14 = 68;
    const static uint8_t A15 = 69;
    #elif defined(__AVR_ATmega644P__)
    const static uint8_t A0 = 24;
    const static uint8_t A1 = 25;
    const static uint8_t A2 = 26;
    const static uint8_t A3 = 27;
    const static uint8_t A4 = 28;
    const static uint8_t A5 = 29;
    const static uint8_t A6 = 30;
    const static uint8_t A7 = 31;
    #else
    const static uint8_t A0 = 14;
    const static uint8_t A1 = 15;
    const static uint8_t A2 = 16;
    const static uint8_t A3 = 17;
    const static uint8_t A4 = 18;
    const static uint8_t A5 = 19;
    const static uint8_t A6 = 20;
    const static uint8_t A7 = 21;
    #endif

    さらに、これを処理する部分があるはずなので、探したところ、同様に wiring_analog.c の中の、analogRead()という関数で処理していそうだったので、同様に以下のように黒字部分を arduino-0022/hardware/arduino/cores/arduino/wiring_analog.c から追加し、さらに赤字部分をオリジナルで追加しました。

    #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    if (pin >= 54) pin -= 54; // allow for channel or pin numbers
    #elif defined(__AVR_ATmega644P__)
    if (pin >= 24) pin -= 24; // allow for channel or pin numbers
    #else
    if (pin >= 14) pin -= 14; // allow for channel or pin numbers
    #endif

    これでサンプル「AnalogInput」も無事に動作するようになりました。
    ただ、これだけの記述だけではデジタルピンが sanguino.ccに掲載されている端子配置にならないような気がしたのですが、上記の変更でデジタルピンもこの順番で動作するようです。

    ・・・もう少し調べてみたら、arduino-0022/hardware/sanguino/cores/arduino/pins_arduino.c の中の配列 digital_pin_to_bit_mask_PGM[] の中で、PortAだけ逆順に並んでいました。ここでデジタルピンの並び順を変換しているようですね。

    ライセンスを見ると、LGPLのようなので、差分を取り込んだファイルを添付(sanguino_analog.tar.gz)しておきます。同名のファイルを差し替えれば同じレベルになるはずです


  • Mega644版Arduino(Sanguino)・・・ハードウェア編

    投稿日 2011年 8月 15日 コメントはありません

    無事にコンパイルできることが確認できた(といっても、Blinkだけですが)ので、ハードウェアを準備します。確認のターゲットはまずはサンプルプログラムBlinkです。なので、(Arduinoでの)デジタル13ピンにLEDを接続したものを点滅させるのが目標になります。

    最終的に作ったハードウェアはこんな感じです。(途中の写真がないのですみません)

    16MHzのクリスタルと22pFのコンデンサ2つ、Vcc/GND間のパスコン(チップセラミックコンデンサ1uF)を実装した小さな基板を作って、ブレッドボード上のATmega644Pのそばに取り付けました。さらに、リセット端子のプルアップ抵抗と電源供給の配線を行っています。画面左上の青いコンデンサは自動リセット用のDTR信号にかませる0.1uFのコンデンサです。右上の緑色の基板はホストとの通信用のAE-UM232Rで、上の写真ではすでに接続済みです。写真下にはちょっとだけLEDの頭が見えています。

    1. AVRISP mkII(他のものでもいいですが)の接続
      まず、購入状態のATmega644PではArduino(Sanguino)として動作しませんので、ブートローダを書き込んでやります。自分はAVRISP mkIIを使用しているので、ピン配置を確認しながらVcc/GND/MISO/MOSI/RESET/SCKの6pinを接続します。RESETにはプルアップが必須なので忘れないようにします。
    2. ブートローダの書き込み
      ターゲットのATmega644pに電源を供給し、 Arduinoから「Tools」→「Burn Bootloader」→「w/ AVRISP mkII」を選択して、ブートローダを書き込みます。
      書き込みには多少時間がかかりました。赤い文字のエラーメッセージが出ていないことを確認します、
    3. AE-UM232Rの接続
      TXD/RXDを接続し、さらに自動リセット用のDTRを0.1uFのコンデンサを経由して接続します。さらに動作確認用のLEDと抵抗を19pin(D13)に接続します。
    4. 書き込み&実行
      サンプル「Blink」をコンパイル&アップロードして実行します。

    これで問題なく無事にLEDが点滅しました。


  • Mega644版Arduino(Sanguino)・・・準備編

    投稿日 2011年 8月 14日 コメントはありません

    手元にグラフィック液晶があるのですが、これをArduino(28pin ATmega)で制御しようとすると、グラフィック液晶は4bit制御モードがないために最低でも10pinは必要になってしまいます。

    なので、ピン数の多い手持ちのATmega644Pを使いたいのですが、ArduinoのIDE(統合環境)に慣れてしまうと「できればArduino(の統合環境)」で使いたい、と思ってしまいます。さらにArduinoの場合、bootloaderを書き込んでおけば、AVRISP mkIIなども必要なくなるというのも魅力です(むしろこっちの魅力の方が大きい。コマンドラインでブートローダを使う方法はないだろうか?)。

    で、大抵の場合はこういうのは先人がいるので、Googleさんで調べてみると、Sanguino.ccが該当することがわかりました。しかし、こちらのサイトはArduinoの0018を対象にしているようなのでちょっと古そうだと思ってがっかりしたのですが、ダウンロードページをよく見ると、「For arduino-0018 and newer:」となっています。記載されているインストール方法をみると、既存のArduinoのディレクトリにまるごと追加のディレクトリをコピーするようなので、試してみることにしました。実際に試したインストール手順は以下の通りです。

    1. ダウンロードのページからリンクを辿っていって、Sanguino-0018r2_1_4.zipをダウンロードします。
    2. ダウンロードしたzipファイルを展開します。
    3. ダウンロードしたSanguinoというフォルダを 「~/arduino-0022/hardware/」 の下に「sanguino」という名前でコピーします。
    4. arduino IDE を起動して、「Tools」→「Borads」の下に、sanguinoが追加されるのを確認します。
    5. 何かサンプルをコンパイルしてみます。

    これでとりあえずコンパイルできる所までは確認できました。