WebブラウザからArduinoを操作する(1)

アマゾンでイーサネットシールドが安かったので購入。

https://www.amazon.co.jp/dp/B0112A1WN0/ref=pe_492632_237456852_TE_3p_dp_1

価格:     ¥ 784 & 関東への配送料無料(価格変動があります)

中国からの発送で最大3週間くらいかかることがあります。

 

ググッていたらWebからArduinoを操作できると言う記事があったのでやってみました。

詳細は下のURLを参照。

http://www.hiramine.com/physicalcomputing/arduino/httppostmethod.html

 

左図の接続は上記URLのサンプルプログラム用

 

必要なもの

 Arduino

 イーサネットシールド

 ブレッドボード

 LED 3個

 抵抗200Ω〜1kΩ(LEDによって異なる可能性があるので330Ω以上が安全かも)

 ジャンパワイヤー

今回、購入したイーサネットシールドに搭載されているチップW5100とシールド本体にはMAC ADDRESSを保存することができないらしいです。

ですから、MAC ADDRESSのシールも貼っていません。

スケッチの中で指定するので気にする必要はありません。

 

LEDの操作が出来ましたがもっと他のことができるか調べてみます。

今回の物はhtmlのリストはスケッチの中に書かれていますが、マイクロSDカードにindex.htmlを保存する方法の記事もありました。

 

万一、上手く動作しない場合はIP ADDRESSを調べてください。

 

最初はIP ADDRESSはPCのIP ADDRESSと重複していなかったら何でもいいかな?と思っていましたが、

IP ADDRESSは前の3つの値をPCのIP ADDRESSと合わさないと正常に動作しませんでした。

 

 

 

WebブラウザからArduinoを操作する(2)

htmlファイルをイーサネットシールドのマイクロSDカードに保存して、そのhtmlのWebからArduinoを操作する記事があったのでやってみましたが、マイクロSDカードに保存したindex.htmをどうしても開くことが出来ません。何が悪いのか現在不明。

動作するか確認するために上の記事を参考にしてhtmlファイルをスケッチ内に記載して動かしてみました。

 

詳細は下のURLを参照。

http://www.smartdiys.com/blog/arduino-uno-ethernet-shield/

ブラウザからArduino Unoを制御

 

また、記事元のスケッチはArduinoに搭載したLEDを点灯するようになっているのですが、動作しなかったので

                   D13からD7に変更し、LEDと抵抗をD7とGNDに接続したら動作しました。他の記事を見るとD10からD13まで

                   イーサネットシールドが使用しているとありました。

 

//Arduinoスケッチ(byte ip[] 部はPCに合わせて必ず変更が必要)

/*Arduinoに書き込んだらをクリックして開く(リンクになっている。)
ブラウザからhttp://192.168.11.200/で開く。byte ip[]の値を変更したら左のリンクも変更すること。
 * HTMLは、Arduino UNOの7ピンに搭載されているLEDのON/OFFを制御します。
ONボタン/OFFボタンをクリックすることにより、ブラウザ経由で7ピンをON/OFFすることができます。
*/
#include <SPI.h>
#include <Ethernet.h>
#include "TextFinder.h"

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  //MAC ADDRESSは何でもいいような気がします。
byte ip[]  = { 192, 168, 11, 200 };    //前3つの数値をPCのIP ADDRESSと合わして、4つ目は重複しない数値にする。

EthernetServer g_server(80);

// HTML出力
void PrintHtml(EthernetClient& client)
{
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println();
  client.println("<!DOCTYPE html>");
  client.println("<html lang=\"ja\">");
  client.println("<head>");
  client.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"); 
  client.println("<title>ArduinoをLAN制御</title>");
  client.println("<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css\">"); 
  client.println("</head>");
  client.println("<body>");
  client.println("<div class=\"container\">");
  client.println("<div class=\"page-header\">");
  client.println("<h1>ArduinoをLAN制御</h1>");
  client.println("</div>");
  client.println("<h2>LED制御(D7)</h2>");
  client.println("<a href=\"/?pin7=1\" target=\"ifr\" class=\"btn btn-primary\">ON</a>");
  client.println("<a href=\"/?pin7=0\" target=\"ifr\" class=\"btn btn-default\">OFF</a>");
  client.println("</div>");
  client.println("<iframe name=\"ifr\" style=\"display:none;\" width=\"0\" height=\"0\"></iframe>");
  client.println("</body>");
  client.println("</html>");
}

void setup()
{
  Ethernet.begin(mac, ip);
  g_server.begin();

  Serial.begin(9600);

  Serial.println("Ready");
}

void loop()
{
  EthernetClient client = g_server.available();

    // Html出力
    PrintHtml(client);
 
  if (client)
  {

      TextFinder finder(client);

    if (finder.find("GET"))
    {
      while (finder.findUntil("pin", "\n\r"))
      {
        int iPin = finder.getValue();
        int iVal = finder.getValue();

        pinMode(iPin, OUTPUT);
        digitalWrite(iPin, iVal);
        Serial.print("Pin" + String(iPin));
        if (iVal == 1)
        {
          Serial.println(" ON");
        }
        else
        {
          Serial.println(" OFF");
        }
      }
    }

    delay(1);
    client.stop();
  }
}

Arduino互換機

2~3人程度で開発した8pinoの開発経緯を書いたHPを見つけました。

 

開発者さんが自分が欲しいと思った互換機を量産して販売するまでの経験を綴っています。

http://qiita.com/akichika/items/4c282c638b38681050d9

このサイトを見ると自分もできそうな気になりました??

左の写真を見て、えっ本当と思いました!!

これが実際の大きさです。

製品の大きさは8x23mmでマイコンボード本体部だけ切り取ることができて8x12.5mmという大きさになります。

しかも、これは直接USBに接続することができます。

上の写真の下側をマイクロUSBケーブルに差し込んで使えます。

本体価格は税込みで888円です。

 

ついにこの商品のパクリ??同じコンセプト?の商品が大陸から出ました。

https://www.amazon.co.jp/gp/product/B00VM5M4W4/ref=pe_1895532_235309352_em_ti

大きさは4~5倍程度(約18x25mm程度)で、価格は送料無料で380円。(2016.08.20現在 200円)価格では勝ち目がなさそうだ。

ATtiny85ボード

ebayで安かったので購入。

Digispark Kickstarter ATTINY85 Arduino Micro USB Development Board

http://www.ebay.com/itm/201315743180

2016/8現在 148円(送料無料)

中国発送のため2週間程度かかる

 

http://nopnop2002.webcrow.jp/ArduinoISP/ATtiny1.html

ArduinoISPでATtinyへスケッチを書き込む(その1)

を参考にしてセットアップしました。

(2018/11/15現在、Ubuntuにapt installでインストールしたArduino IDEは、Arduino 2:1.0.5で上記のサイトのIDEと異なるためか、上記の方法で設定できないため、ATtinyが選択肢にでてきませんので使用できないようです。

ArduinoのサイトからArduino 1.8.7をダウンロードすると使用することが出来ました。)

 2年ぶりに実際に使用するために書き込みしようとしたらエラーが出てできない?

PCが新しくなったのとLinux UbuntuのバージョンとIDEのバージョン?が変わって、それ以外変わった所がない。

Arduinoとの接続はワンタッチで接続出来るようにボードを作成しているので間違いがないはずだが、ATTINY85を認識できないみたい。

 

左図はスケッチを書き込む時の接続図。

いちいち、ブレッドボードで接続するのは面倒なのでユニバーサル基板で左図の回路を製作しました。

 

下側の端子はUSB端子でPCに直接さすことができる。

                                 D+,D-はMCUと継っているが??。

    pinMode()
    digitalWrite()
    digitalRead()
    analogRead()
    analogWrite()
    shiftOut()
    pulseIn()
    millis()
    micros()
    delay()
    delayMicroseconds()

程度しか現状は使用できないらしい。

元々6Pinしかないので、あまり複雑なことは出来ないがサイズが19x26.5mmなのでものすごく小型化できる。

 

ATmega1284P

(ArduinoにはMega2560という100PinのMCUのマイコンボードがあります)

・プログラムメモリ:128Kバイト
 10,000回書き換え可能なフラッシュメモリです
・SRAM:16Kバイト
・EEPROM:4Kバイト
 100,000回書き換え可能です
・タイマー:8ビットx2、16ビットx1
・PWM:最大6出力
・ADコンバータ:最大8入力(最大10ビット)
・通信機能:USART、SPI、I2C
・電源電圧範囲:1.8V~5.5V
・動作クロック:最大20MHz
・I/Oポート:最大32ピン
・形状:DIP40ピン
   (PDIP、2.54mmピッチ)

 

アナログ入力         A0~A7(デジタル入出力として使用可)

デジタル入出力     D0~D23(内PWMは8Pinが対応)

16MHz or 20MHz

ネットで調べていたら日本でも世界でも互換機を作っている人がいました。

ArduinoIDEもATmega1284Pに対応していました。

 

PIC18F4550-I/P(USB内蔵)

これはUSB内蔵ですからATmega328P等のようにUSBシリアル変換のチップは必要ありません。

・40ピンハイパフォーマンス
 エンハンスドフラッシュUSBマイクロコントローラー
・ナノワットテクノロジー
=主な仕様=
・クロック:DC~48MHz
・プログラムメモリ:32Kバイト
・RAM:2048バイト
・EEPROM:256バイト
・I/Oポート:最大35
・A/Dコンバータ:10bitx13ch
・1CCP、1ECCP
・タイマー:8bitx1ch、16bitx3ch
・コンパレータ:2
・電源電圧:2~5.5V
※パッケージ:DIP40ピン

 

デジタル入出力     D0~D29(内PWMは2Pinが対応)

アナログ入力         A0~A7(デジタル入出力D13~D20をアナログ入力として使用可)

 

こちらはPCから直接I/Oの入出力操作ができるフリーソフトがあるようです。(調査中)