ESP12単体でwifi connection

単体でWifi に接続して、データをThingSpeak に投げるテストをしてみました。

 

IMG_0269

配線はこんな感じで、GPIO12 と 13 にLEDをくっ付けてみました。アクセスポイントにコネクションしたときにダブルブリンク、WEBにコネクションしているときは、点灯する感じです。

スクリーンショット 2015-05-09 16.13.41

まだ、センサーとかはつけていないのでカウンター値を上げてみました。

imageほほー、簡単ですね。

 

コードはこんな感じです。

/*
 ESP8266 HTTP get webclient test.
 https://thingspeak.com/channels/37124
 Arduino-compatible IDE with ESP8266
 arduino-1.6.1-macosx-java-latest-signed.zip
 https://github.com/esp8266/Arduino
 JunkHack 2015.05.09
 */
 
#include <ESP8266WiFi.h>
 
const char* ssid     = "JunkHack";
const char* password = "testtest";
 
const char* host = "184.106.153.149";
 
void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  Serial.begin(115200);
  delay(10);
 
  // We start by connecting to a WiFi network
 
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    digitalWrite(13, HIGH);
    delay(400);
    digitalWrite(13, LOW);
    delay(100);
  }
 
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}
 
int value = 0;
int count = 0;
 
void loop() {
  delay(5000);
  ++value;
 
  Serial.print("connecting to ");
  Serial.println(host);
 
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  
  digitalWrite(12, HIGH);
  delay(1000);
  count += 1;

 
  // We now create a URI for the request
  String url = "/update?key=5GPL7J7EVNB5R8GE&field1=";
  url += count;
  Serial.print("Requesting URL: ");
  Serial.println(url);
 
  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
  delay(10);
 
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
 
  // Close connection
  Serial.println();
  Serial.println("closing connection");
  digitalWrite(12, LOW);
}

ArduinoIDE のシリアルモニターでも見れますが、osx のCoolTermでは以下のように見れます。

Connection_Options__CoolTerm_0__と_CoolTerm_0

 

Menubar_と_Connection_Options__CoolTerm_0__と_CoolTerm_0

 

Connection_Options__CoolTerm_0__と_CoolTerm_0 2

 

Menubar_と_CoolTerm_0_と_Windows7__Running_

 

参考にさせて頂いたページ

ESP8266モジュールをArduinoとして使う

http://ehbtj.com/electronics/esp8266-as-arduino

 

ESP8266をUSB-TTLシリアル変換してWi-Fiの確認する

http://qiita.com/masato/items/a3b71f8a17b876be8f76

 

ESP8266 Wifi Temperature Logger

http://www.instructables.com/id/ESP8266-Wifi-Temperature-Logger/?lang=ja&ALLSTEPS

ESP8266 ESP-12 DoubleBlink

ESP8266 チップを使った WiFiモジュールの ESP-12 を触ってみました。

面白いことに、このモジュール単体でGPIOがあり、ArduinoIDEでプログラムを書き込みできてしまうという点です。

まずは、ハードウェアのHelloWorldであるLED点滅をやってみました。

ESP8266-DoubleBlink.mov 2015.05.08 08.45.29.660

モジュールはこんな感じでちっこいです。3.3Vで動作します。ブレッドボードに刺さらない2mmピッチなので下駄を履かせています。 基盤のしたにジャンパーを伸ばしてやらないと配線できませぬ。

ESP8266-DoubleBlink.mov 2015.05.08 08.46.59.348

そのうち、オフィシャルのArduinoIDE にも入るかと思いますが、以下からESP8266 をサポートしたIDEをゲットします。

 

esp8266/Arduino · GitHub

https://github.com/esp8266/Arduino

 

ESP8266-DoubleBlink.mov 2015.05.08 08.49.25.402

ボードにESP8266 が入っています。

ESP8266-DoubleBlink.mov 2015.05.08 08.49.36.091

書き込み装置には、esptool が入っています。

ESP8266-DoubleBlink.mov 2015.05.08 08.49.46.156

配線は以下のようにします。上にあるのは、5V to 3V のレギュレーターです。書き込みするときは、GPIO0 をGND に落としてやります。

aacf887cc59654663f08674be38c52c9

コードはダブルブリンクを以下のようにしてみました。

/*
 ESP8266 Double Blink Sample.
 Arduino-compatible IDE with ESP8266
 arduino-1.6.1-macosx-java-latest-signed.zip
 https://github.com/esp8266/Arduino
 JunkHack 2015.05.08
 */
 
void setup() {
  pinMode(0, OUTPUT);
}
 
void loop() {
  digitalWrite(0, HIGH);
  delay(400);
  digitalWrite(0, LOW);
  delay(100);
  digitalWrite(0, HIGH);
  delay(500);
  digitalWrite(0, LOW);
  delay(1000);
}

IDE から書き込みすると以下のようになります。

ESP8266-DoubleBlink.mov 2015.05.08 08.50.15.224

とりあえず、書き込み方法はわかりました。

映像は以下をどうぞ。

[youtube https://www.youtube.com/watch?v=9TUboOLnz6A]

次回は、WiFi でコネクションする何かをやりたいですね。

面白いことに、透過モードにするファームウェアもあるので試してみたいですね。

 

ESP8266-transparent-bridge

https://github.com/beckdac/ESP8266-transparent-bridge

nWorld ESP8266で透過モードを使ってみた。

http://firtel.blogspot.jp/2015/01/esp8266.html

CP2102 Serial Converter

前回、続々と素材をゲット した中のパーツを2つ試してみました。

まず、あまりの安さに手を出したPro Mini 168 Mini ATMEGA168 5V/16MHz の10個入りの中の1つを半田付け。で、こいつはUSBシリアルのインターフェイスを持っていないので、USB UARTのCP2102 Male USB 2.0 to TTL UART Module Serial Converter をつなげる形でプログラムを転送します。

 

で、Pro Mini 168 5V はなんの苦労もなくLEDが光って動作確認はできたのですが、このシリアルコンバータの接続が???。購入時は気に留めていなかったのですが、DTR端子が見当たりません。

とりあえず、以下のように4本をつなげてデータ転送してみたのですがエラーが出てだめ。

IMG_0194 2

うーん、DTRを取り出そうにもそんな端子が見当たらず、グーぐる先生に聞いてみたところ、どうやらリセットボタンを使ってやればよろしいようです。

 

映像で見たほうがわかりやすいので、どうぞ。

[youtube https://www.youtube.com/watch?v=k4aoLH-8WQw]

DTRがなくても、こんなヒト手間をかければよろしいようです。

とはいっても、やっぱりDTR端子は欲しいので、次回の買い物のついででAliexpress のどっかでゲットすることにします。

 

で、このProMiniは今作ってるJunkFDDプロッターに鎮座させる予定です。容量とか足りるのかどうかはまだ未知ですが。まぁ、そんなにたいしたプログラムを乗っけるわけじゃないのでオーバースペックかもですが。なんせ、1個160円くらいなので気安く使ってしまえという発想ですが。

 

とりあえず、ProMiniとCP2102の検証でした。

FDD5

Z軸用のEasyDriver を半田付け。

退屈な映像ですが、よかったらどうぞ。

[youtube https://www.youtube.com/watch?v=kW4_Ny8mHvA]

この小手、もう30年くらいつかっているやつです。

 

で、Z軸のペンをつける部分を100円均一で探してきました。

IMG_0184

こんなのを探していたんですが、ぴったりです。付け根の金具をはずして、ほっとボンドでくっつけました。

IMG_0182

筐体は、FDDをはずしたPCのジャンク筐体に使用されていたプラスティック製の物です。ほどよくカットして、台を調整すればちょうどいい感じかなと。

台は面積を広げれば、CD-ROMやDVDなんかのレーベル面にも書けるかもです。まぁ、2cm四方なので微妙ですが。

ブリキとかを使わないとボロさが出ないかなぁと思いますが、まぁ装飾はあとで考えることにします。

 

さて、QKしたらカットしてきますかね。

で、カットしました。

IMG_0185

位置関係などはよさそうです。

IMG_0189

CD-ROM も収まるくらいの奥行きが取れそうです。

 

まだ仮なので、横にして動作を確認しました。こんな感じです。

[youtube https://www.youtube.com/watch?v=Sh5Dr_-QU-A]

うーん、ぼろい!

タッチセンサー代わりにしてみる

FDD をよく見てみたら、センサーっぽいのを発見。基盤をみるとなにやら配線があって。使えるかもと試してみました。

IMG_0148

裏面には基盤があって、なにやら3本線が出てます。

IMG_0149

ブルーをGNDに、黄色と赤のアナログ値を読んでセンサー代わりに使ってみます。

 

コードはこんなのをテストで書きました。

/*
 Junk FDD Stepper Motor Control Sample.
 Analog Censer?
 JunkHack 2015.04.19
 */
 
#include <Stepper.h>
int steps;
int movement = 1400;
int Delay = 200;
int dirPin = 2;
int stepPin = 3;
int a0; // sencer ?
int a1; // sencer ?

void setup() {                
  pinMode(dirPin, OUTPUT);
  pinMode(stepPin, OUTPUT);
  digitalWrite(dirPin, LOW);
  digitalWrite(stepPin, LOW);
  steps = 1;
//  Serial.begin(9600);      // debug用
  a0 = analogRead(0);
  a1 = analogRead(1);
}

void loop() {
  if ( a0 > 200 ){ // センサーっぽいのを読み取り
      digitalWrite(stepPin, HIGH);
      delayMicroseconds(Delay);
      digitalWrite(stepPin, LOW); 
      delayMicroseconds(Delay);
      steps += 1;
      
//      Serial.println("A0");
//      Serial.println(a0);

  }

  if ( steps < movement ) {        // 移動量を超えてなければ
      digitalWrite(dirPin, HIGH);
      a0 = analogRead(0);
      a1 = analogRead(1);
  } 
  if ( steps > movement  ) {    // 移動量を超えたら
      digitalWrite(dirPin, LOW);
      a0 = analogRead(0);
      a1 = analogRead(1);
  }

  if ( steps > movement * 2 ) {    // 往復したら
     steps = 1;
  }
}

 

すると、筐体に触るとスイッチ代わりに動作!

 

動画を載せたほうがわかりやすいんですが、普段編集しないので扱いが、、、、勉強しておきます。で、動画つくりました。

こんな感じで、タッチセンサーっぽくなっています。

[youtube https://www.youtube.com/watch?v=CoXw4ywPP0g]

 

このセンサーはなんていうやつなんでしょうかね。ぐぐっても出てこないので、なんという名称のセンサーなのかは不明ですが、スイッチらしきなのは確かで、原理的に静電容量とか見ているんでしょうかね? 手を接近させると、値があがります。タッチセンサーのような原理なんですかね?どなたかご存知の方、通りがかりましたらコメントをよろしくです。

 

とにかく、このモーターと稼動部分はプロッターのどこかに使えそうです。あと2つFDDをばらして3軸作れば、FDDプロッターができそうですね。

 

そう、これをarduino で作りたいんですよ。

[youtube https://www.youtube.com/watch?v=Z0vQIaUZGu4]

EasyDriver

1個160円くらいのEasyDriverを3つゲットして、まずは1つを半田付け。

IMG_0138

ブレッドボードも新調しました! 前使ってたのが、ピンがめちゃくちゃ入りにくくて。今度のは、いいですね。挿しやすくてイライラしない。で、こんな感じに差し込んで半田付け。

IMGP0825

で、ステッピングモーターを用意してなかったので、フロッピーディスクか、CD-ROMを分解してステッピングモーターを取り出すことに。

 

Junk物色中。配線中、、、、完了。接続。、、、、うごきません。!!!

 

寝る!

 

・・・ 起床後、ふと見るとEasyDriver 側のLEDがついていないのを発見。電源が入っていませんでした。

写真_1

5Vをモータードライブ用に入れていたんですが、仕様的に、6~30Vとか書いてあるので、手持ちに8Vくらいのしかなかったので、それを印加。

サンプルは、ネットで見たのをコピペ。PINのアサインは、PIN2 に Direction (正逆の回転方向)と、PIN3 にStep パルスを。

写真_2

ほほー、な感じです。他にもPinがあるけども、深追いせず。Sleep とか PFD とか何に使うんでしょうかね。写真 3

 

/*
 Junk FDD Stepper Motor Control Sample.
 JunkHack 2015.04.19
 */
 
#include <Stepper.h>
int steps;                // ステップカウンター
int movement = 1400;            // 片道移動量 ( step 数)
int Delay = 200;            // 遅延 ms
int dirPin = 2;                // 回転方向出力 Pin 
int stepPin = 3;            // ステップパルス Pin

void setup() {                
  pinMode(dirPin, OUTPUT);        // 回転方向の出力PINを指定
  pinMode(stepPin, OUTPUT);        // ステップ出力PINを指定
  digitalWrite(dirPin, LOW);        // PIN出力をLOWで初期化
  digitalWrite(stepPin, LOW);        // PIN出力をLOWで初期化
  steps = 1;                // ステップカウンターを初期化
}

void loop() {
  if ( steps < movement ) {        // 移動量を超えてなければ
      digitalWrite(dirPin, HIGH);    // 回転方向出力PIN は HIGH (5V)
  } 
  if ( steps > movement  ) {    // 移動量を超えたら
      digitalWrite(dirPin, LOW);    //  回転方向出力PIN を LOW (0V)
  }
  digitalWrite(stepPin, HIGH);        // ステップ出力 PIN を HIGH (5V)
  delayMicroseconds(Delay);        // 遅延
  digitalWrite(stepPin, LOW);        // ステップ出力 PIN を LOW (0V)
  delayMicroseconds(Delay);        // 遅延
  steps += 1;                // ステップカウンターを +1加算
  if ( steps > movement * 2 ) {    // 往復したら
     steps = 1;                        // ステップカウンターリセット
  }
}