esp-wroom-02 光センサーの値を読み取る

esp-wroom-02 光センサー値

 

・目的

 光センサーにて取得したデータをシリアルモニタ上に表示させる。

 

・使用したもの

 esp-wroom-02

 

ESP-WROOM-02ピッチ変換済みモジュール《T型》

ESP-WROOM-02ピッチ変換済みモジュール《T型》

 

 

  ジャンパワイヤ

 

普通のジャンパワイヤ(オス?オス)

普通のジャンパワイヤ(オス?オス)

 

 

 ブレッドボード

 

普通のブレッドボード

普通のブレッドボード

 

 

 ノートパソコン(windws10)

  光センサー

 

 

 

・方法

  (1)回路を組み立てる

光センサーで読み取った値をアナログ値として受け取る。

esp-wroom-02のTOUTピンを使う。このピンはArduino uno の

アナログピンに当たる。ダウンロードモードの回路を図1に示した。

実際にプログラムを書き込むときはリセットすることを忘れないこと。

リセットはRSTピンをGND(ブレッドボードのマイナス)につなげ、

抜くことで可能。またプログラムを実行するときは回路を組み直す必要

があることに注意すること。

 

f:id:shangtian:20170304113255p:plain

図1:ダウンロードモード

  (2)プログラム

通常のarduinoとアナログピンの読み取り方法(プログラムの書き方)が若干異なることに注意してプログラムを作成した(図2)。

 extern "C" {
  #include "user_interface.h"

}

void setup() {
 Serial.begin(115200);//シリアル通信を開始
 
}

int getToutValue() {
 int res = system_adc_read();

 return res;
} //toutピンの読み取り

void loop() {
  int val = getToutValue(); //値の受取
  Serial.print("value:");
  Serial.print(val);//シリアルモニタに値を表示
  Serial.print("\n");
}

図2:esp-woorm-02に書き込んだプログラム    

(3)実行

 

図のように回路を組み換え実行モードに変更する。この時も

リセットすることを忘れないこと。f:id:shangtian:20170304113140p:plain

 図3:実行モード

 

 

 

 

 

・結果

  しっかり光センサーで読み取った値をシリアルモニタ上に表示させることが

出来た。

 

f:id:shangtian:20170304113314p:plain

 

 

 

Arduino-processing シリアル通信により連携させる 改良版

・目的

 前回の実験ではArduino側で読み取った値をうまくprocessing側に表示

 できなかった。ここの改善を図る。

 

・方法

     (1)arduino側プログラム

    Arduino側のint型は2バイトで0~1023を表示可能だが

    シリアル通信によって送ることが可能なデータ量は1バイトで

    0~255となるため、Arduino側でシリアル通信で送る値を

    map関数によって変更した。図1にプログラムコードを記載した。

void setup() {

 Serial.begin(115200);
}

void loop() {
  
  int val =map( analogRead(0),0,1023,0,255);
  
  Serial.write(val);
  
 

}

 

図1:Arduino側プログラム

 

 (2) Proessing側プログラム

    こちらのコードは変更を加えていない。Processingの

   プログラムコードは図2に示した。

 import processing.serial.*;

Serial myPort;
float x;
int y;
void setup() {
  background(255);
  size(800,500);
  
  myPort = new Serial(this,"COM3",115200);
  y = 500;
}

void draw() {
 
  x+=0.5;
  noStroke();
  fill(#F7114F);
  ellipse(x,500-y,10,10);
  if(x>width){
    x = 0;
    background(255);
  }
}

void serialEvent(Serial myPort){
  y = myPort.read();
}

 

    図2:Processing側プログラム

 

>espressif ESP-WROOM-02 Wi-Fiモジュール

価格:864円
(2017/3/21 07:12時点)

・結果

値がジャンプすることなくproessing側で表示することが出来た。


Arduino-processing 改良

 

・考察

まだprocessing側で表示できるのはArduino側のセンサー1個

のみのデータである。複数のセンサーの値を表示するには

配列と繰り返しの工夫を加をすれば可能ではないか。

Arduino-processing シリアル通信にて連携させる

・目的

 Arduinoで所得したデータをシリアル通信でprocessingに送りグラフを表示。

 

 

・使用したもの

 Arduino uno

   ブレッドボード

 ジャンパワイヤー

 可変抵抗

   processing 3.2.1

 

・方法

 

(1)回路

   図1のように組む。

f:id:shangtian:20170302134453p:plain

図1:可変抵抗

 

(2)Arduino側のプログラム

アナログピン0から値を読み取るので0ピンを読み取るようにセット

読み取った値をvalに代入

int val = analogRead(0);

以下にてシリアル通信で値を送る

  Serial.write(val);
今回使ったコードを図2に示した
void setup() {

 Serial.begin(115200);
}

void loop() {
  
  int val = analogRead(0);
  
  Serial.write(val);
  delay(100);
 

}

 図2:Arduino

 

(3)processing側のプログラム

Arduinoが接続しているポートアドレスを入力する

今回はCOM3だったので、そう記入した。

myPort = new Serial(this,"COM3",115200);
import processing.serial.*;

Serial myPort;
float x;
int y;
void setup() {
  background(255);
  size(800,500);
  
  myPort = new Serial(this,"COM3",115200);
  y = 500;
}

void draw() {
 
  x+=0.1;
  noStroke();
  fill(#F7114F);
  ellipse(x,500-y,10,10);
  if(x>width){
    x = 0;
    background(255);
  }
}

void serialEvent(Serial myPort){
  y = myPort.read();
}

 図3:processing側

 

(4)実行

Arduino unoをパソコンに接続し、(3)で作ったprocessingを起動させる。

可変抵抗のつまみを回しグラフの変化を観察する。

 

 

・結果

  Arduinoとprocessing間での通信は一応成功した。しかし可変抵抗を回し

 ていくと、途中で値がゼロに飛んでしまう。またグラフも滑らかではなく

 速く可変抵抗のツマミを回すとグラフが線でなく点になってしまった。


arduino-processing シリアル通信 円

 

・考察

  • グラフの値がゼロに飛ぶ理由について

まず、可変抵抗の値をうまく読み取れていない可能性を考慮し、

シリアル通信にて取得データを確認した。取得したデータは0~1023

であり正常であった。よって、問題はprocessing側有る可能性が出てきた。

 

次にprocessing側がシリアル通信にて取得したデータを確認するため

以下のプログラムを実行した。

import processing.serial.*;

Serial myPort;

int x;

void setup(){
  
  size(1000,1000);
  
  myPort = new Serial(this, "COM3",115200);
}

void draw() {
  background(255);
  
  ellipse(width/2,height/2,x,x);
  textSize(16);
  println(str(x));//下のバーに値を表示
}

void serialEvent(Serial myPort){
  x = myPort.read();
  
}

結果は0~255までしか表示されておらず、受け取った値が255を

超えると0にジャンプする


processing シリアル通信テスト

 

以上の結果からシリアル通信が問題だと考えられる。

 

Arduinoで使われるint型は2バイトシリアル通信では1バイトずつ

データを送るので、ここを処理しないとうまく表示できないことが

分かる。

 

 

<参考文献>

http://d.hatena.ne.jp/kougaku-navi/20141008/p1

【ドスパラWeb】

  

ArduinoでLCDディスプレイを動かしてみた

・目的

 osoyooのarduinoキットに入っていた

 ディスプレイにhello worldを表示させる

 

・使ったもの

 arduino uno

 

【永久保証付き】Arduino Uno

【永久保証付き】Arduino Uno

 

 

  ノートパソコン(windows10)

 ブレッドボード

 

 

 ジャンパワイヤーオス、メス

 キャラクタLCD(16×2)(osoyoo製)

 

・方法

 (1)LCDライブラリーをインポート

    http://osoyoo.com/ja/2014/12/07/16x2-i2c-liquidcrystal-displaylcd/

    osoyooのサイトからLiquidCrystal_I2C.zipというlibraryファイルを

    ダウンロードしてzipファイルを解凍する。

    解凍したファイルをc/programfile/arduino/libralesにコピー

 

 (2)LCDarduinoを接続

    

    SDAはSerial Data Access (シリアルデータアクセス)の略。     

    SCLはSerial Clock Line (シリアルクロックライン)。

          SDLをa5 、SDAをa4に接続した。回路図は図1に示した。

f:id:shangtian:20170301190559p:plain

図1:LCDArduinoの接続

 

 (3)i2cアドレスを特定する

    i2cアドレスを特定するために以下のプログラムコード(図2)を

    インポートし、シリアル通信画面を開き実行すると

    i2cアドレスが表示される(図3)。

 *  ___   ___  ___  _   _  ___   ___   ____ ___  ____  
 * / _ \ /___)/ _ \| | | |/ _ \ / _ \ / ___) _ \|    \ 
 *| |_| |___ | |_| | |_| | |_| | |_| ( (__| |_| | | | |
 * \___/(___/ \___/ \__  |\___/ \___(_)____)___/|_|_|_|
 *                  (____/    
 * www.osoyoo.com IC2 Liquid Crysal Testing program
 * program tutorial : http://osoyoo.com/?p=72
 *  Copyright John Yu
 */
   
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x3f,16,2);  // run ic2_scanner sketch and get the IC2 address, which is 0x3f in my case,it could be 0x3f in many cases
 
void setup()
{
  lcd.init();                      // initialize the lcd
}
 
void loop()
{
// set cursor to first line
lcd.setCursor(0, 0);

// Print a message to the LCD.
  lcd.backlight();
  lcd.print("Hello!");
  lcd.setCursor(0,1);
  lcd.print("Osoyoo.com");
}
図2:i2cアドレスを特定するためのスケッチ http://osoyoo.com/driver/i2c_lcd_test.txt

 



f:id:shangtian:20170301190620p:plain

 

図3:i2cアドレスの特定

 

 (4)プログラムコード

        (3)で調べらiscアドレスを

     LiquidCrystal_I2C lcd(0x3F,16,2);

     と書き込む。

#include  <Wire.h> 
#include  <LiquidCrystal_I2C.h> 

LiquidCrystal_I2C lcd(0x3F,16,2);  // set the LCD address to 0x27 for a 16          chars and 2 line display

void setup()
{
  lcd.init();               // initialize the lcd 
 
  lcd.print("Hello World");// Print a message to the LCD.
  lcd.backlight();
 
}

 

>OSOYOO(オソヨー) Raspberry Pi 学ぶ電子工作キット 初心者演習用パーツセット ラズパイ11実例 回路配線図とサンプルスケッチ有り プログラミング ラズベリー パイ 超入門 スターター学習キット LED制御 スイッチ

価格:8,240円
(2017/3/21 07:16時点)
感想(0件)

・結果

 無事表示できた。

f:id:shangtian:20170301211918j:plain

 

shangtian.hatenablog.com

 

 

<参考文献>

・16x2 I2C LCD プロジェクト(http://osoyoo.com/?p=72

esp-wroom-02 でLチカをやってみた (wifi編)

・目的

 LEDの ON,OFFをスマートフォンを使って操作

 

・使用したもの

  ブレッドボード

  ジャンパワイヤ

  LED

  抵抗(?Ω)

  ESP-WROOM-02

   FT-232RQ USBシリアル変換モジュール

  BlackBerry Bold  9900

   ノートパソコン(Windows10)

 

・方法

  • 回路を組み立てる

この前の記事で書いた回路と大差は無い。回路は図1に示した(但しダウンロードモード)。今回はLEDをGPIO5ピンに接続した。GPIO5はArduinoピンの5と対応していでのでスケッチではピンを5に設定した。 

f:id:shangtian:20170301002036p:plain

図1:esp-wroom-02 LED wifi download mode

  • プログラムコードを書き込む
#include

const char* ssid = "genLAN";
const char* password = "07290614";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  // prepare GPIO2
  pinMode(5, OUTPUT);
  digitalWrite(2, 0);
  
  // Connect to 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(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  int val;
  if (req.indexOf("/gpio/0") != -1)
    val = 0;
  else if (req.indexOf("/gpio/1") != -1)
    val = 1;
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }

  // Set GPIO5 according to the request
  digitalWrite(5, val);
  
  client.flush();

  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n\r\nGPIO is now ";
  s += (val)?"high":"low";
  s += "\n";

  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}

アドレスが

・・・/gpio/1

 のときLEDが点灯し

・・・/gpio/0

 のときLEDが消灯するようにプログラムを組んだ。

  • プログラムを実行する

 

ESP-WROOM-02Flash Boot Mode(実行モード)に回路を組み替え

リセットをして実行する。」

f:id:shangtian:20170301002124p:plain

図2:wifiに接続完了

 

実行すると connecting と表示されて、アドレスが表示される。今回は

192.168.2.107なので使っているルーターに接続した上で192.168.2.107

にアクセスする。192.168.2.107/gpio/0でLEDを消灯。

192.168.2.107/gpio/1でLED点灯

 

・結果

 


esp-wroom-02 でLチカをやってみた wifi編

独自SSL 詳細はこちら

arduino IDEを使って ESP-WROOM-02 LED点滅

 

・目標

arduinoIDEでプログラムを書き込みLED点滅を目指す

 

・準備したもの

 

 ESP-WROOM-02

 シリアル変換キット

 ブレッドボード

 ジャンパワイヤ

 LED黄色

 抵抗(?Ω)

 ノートパソコン(windows10)

 単三乾電池2個

   ArduinoIDE

 

・方法

 

 (1)ESP-WROOM-02のボードマネージャーをインストー

 

まずはarduinoIDEにESP-WROOM-02のボードマネージャーをhttps://github.com/esp8266/Arduino#installing-with-boards-managerからダウンロード

次にArduino IDEを開き、ファイル/環境設定を表示し、追加のボードマネージャーのURLsにhttp://arduino.esp8266.com/stable/package_esp8266com_index.jsonを貼り付ける。

 

f:id:shangtian:20170225115709p:plain

図1:ファイル/環境設定

f:id:shangtian:20170225115512p:plain

図2:環境設定画面

 

Tools / Boards Manager からesp8266を選択してインストールし、IDE側の準備は完了。

f:id:shangtian:20170225115517p:plain

図3: ツール/ボード/ボードマネージャー

f:id:shangtian:20170225115837p:plain

図4:ボードマネージャー

 

 (2)スケッチの書き込み設定①(IDE側)

 以下の表1を参照して設定する。

表1:オプションの設定

オプション

Flash Mode

QIO

Flash Frequency

40MHz

Upload Using

Serial

CPU Frequency

80MHz

Flash Size

4M(3M SPIFFS)

Reset Method

Modemcu

Upload Speed

115200

Port

任意

 

 

3)スケッチの書き込み設定②(ESP-WROOM-02

 

 以前の記事でESP-WROOM-02には2種類のモードが有ることを述べた。スケッチをESP-WROOM-02に書き込むにはUART Download Modeにする必要が有る。図4のように回路を組み、RSTからマイナスにジャンパワイヤを刺しESP-WROOM-02をリセットする(図5)。この作業をすることでESP-WROOM-02のモード変更が完了し、プログラムを書き込むことが出来るようになる。

f:id:shangtian:20170225115528p:plain

図4: 書き込みモード

f:id:shangtian:20170225115526p:plain

 

図5: 書き込みモード リセット

 

(4)プログラムを書き込み

 方法3まででESP-WROOM-02に書き込む準備は完了している。あとはプログラムコードを書き、ESP-WROOM-02に入れるだけだ。プログラムコードは図6に示した。

void setup() {
}
void loop() {
   digitalWrite(4,HIGH);
   delay(400);
   digitalWrite(4,LOW);
   delay(400);
   
   }

 図6:プログラムコード

 

(5)回路の組み立て

 ESP-WROOM-02のPINOUT DAIAGLUを図7にしめした。但し図はhttp://eleclog.quitsq.com/2015/08/esp-wroom-02.html?m=1から転載した。

f:id:shangtian:20170225115505p:plain

図7: PINOUT DAIAGLU

 

方法(3)で回路を組み立てたがESP-WROOM-02を実行モードに変更しないと動かないので

図8のように組みなおす。組みなおしたあとRSTをマイナスにつなげ、抜くとプログラムが実行される。

f:id:shangtian:20170225115502p:plain

図8:実行モード

 

・結果

 Lチカしている動画


esp-wroom-02 でLチカをやってみた

〈参考文献〉

http://4009.jp/post/2016-04-25-esp-wroom-02/

http://eleclog.quitsq.com/2015/08/esp-wroom-02.html?m=1

http://qiita.com/dz_/items/27c2e19981e0bcddcf66

ESP-WROOM-02(シリアル通信編)

 

 

・目標

シリアル通信を行いアクセスポイントに

接続すること

 

・使用したもの

 

FT-232RQ USBシリアル変換モジュール(980円 秋月電子

ESP-WROOM-02(550円 秋月電子

 

ESP-WROOM-02ピッチ変換済みモジュール《T型》

ESP-WROOM-02ピッチ変換済みモジュール《T型》

 

 

ブレッドボード

ジャンパワイヤ

単3乾電池(2個)

USBコード

ノートパソコン(windows10)

ArduinoIDE

 

・方法

 

 (1)FT-232RQ USBシリアル変換モジュールのドライバをインストー

 

まずはFT-232RQ USBシリアル変換モジュールのドライバをhttp://www.ftdichip.com/Drivers/VCP.htmからインストールした。開発環境がwindows10なので図1の赤丸の部分をクリックしダウンロード。そしてexeファイルをクリックしてインストールを実行する。f:id:shangtian:20170224095753p:plain

 図1:USBシリアル変換モジュールのドライバインストー

 

独自SSL 詳細はこちら

 

 (2)回路を組み立てる

 まずは以下の図2(写真を図3に示した)のように回路を組む。ESP-WROOM-02には回路の組み方で2種類のモードを使うことが出来る。表1、表2に示した。今回はATコマンドを用いて通信したいのでFlash Boot Modeを使用する。RSTピンにジャンパワイヤを刺してマイナスに刺してから抜く。これを行うことでリセットされ任意のモードが実行される。

 

表1:UART Download mode

 

ピン

接続先

GPIO15

Low

GPIO0

Low

GPIO2

High

 

表2:Flash Boot Mode

ピン

接続先

GPIO15

Low

GPIO0

High

GPIO2

High

 

f:id:shangtian:20170224101136j:plain

f:id:shangtian:20170224110208p:plain

                 図2:Flash Boot Mode 回路図

 

 

f:id:shangtian:20170224101333j:plain

      図3:組み上げた回路

 

 (3)シリアル通信(準備編)

 

arduinoIDEのシリアル通信を開いておく(図4)。速度設定と改行設定は表3のように設定をした。速度設定は115200 bps、改行CRおよびLFに設定しておく。この時COMポートが対応しているか確認しておく。確認方法はまずコントローラパネルを開きデバイスマネージャーを開く

 

その次にシリアル変換モジュールを図3を参照してESP-WROOM-02に接続。このときシリアル変換モジュールのTXDをESP-WROOM-02のRXDに接続。シリアル変換モジュールのRXDも同様。GNDはマイナスに接続すること。RXDは受信データ、TXDは送信データの意味。

うまく接続出来ると画面に文字化けした文字が表れる。

 

 (4)シリアル通信(ATコマンド)

”ATコマンドとは、通信機器の制御や設定を行うための簡易な言語の一つ。”

http://sp.e-words.jp/w/ATコマンド.htmlより引用)

ATと入力し送信、OKと返答がくればうまく接続されている。

f:id:shangtian:20170224101424p:plain

 図4: ATコマンド

 

 

モードの設定

AT+CWMODE_DEF=1

アクセスポイントの一覧の表示

AT+CWLAP

を入力

AT+CWJAP="your SSID","your PASSWORD"

アクセスポイントに接続完了

 

〈参考文献〉

http://0n0.fc2web.com/kiso/serial.html

http://deviceplus.jp/hobby/entry0032/

http://akizukidenshi.com/download/ds/espressifsystems/0C-ESP8266__WROOM_WiFi_Module_Datasheet__EN_v0.4.pdf

http://qiita.com/dz_/items/27c2e19981e0bcddcf66

http://qiita.com/husky774rr/items/1b50e515413a656d1be5

>秋月電子【FT232RL】USBシリアル変換モジュールキット

価格:864円
(2017/3/21 16:24時点)

独自SSL 詳細はこちら