1. ホーム

ESP8266とArduinoの入門チュートリアル

2022-02-24 17:24:23

ブログ主も初心者で、ネット上の情報が少ないため、全てのロジックを整理するのに1ヶ月近くかかりました。

ブログ主が挑んだプロジェクトは、無線LANモジュールを搭載した小型ロボットを使って、RadioMapを作るというものでした。ブログ主はここでRadioMapが何であるかについてあまり説明していないので、気になる人は自分でGoogleやBaiduで検索してみてください。ただ、RadioMapを作るには、近くのWiFiのRSSIとSSIDを収集する必要があることだけは知っておいてください。

ここで選んだ小さなロボットは、Makeblock mBotとそれに対応するWiFiモジュールです。よくよく調べてみると、mBotに使われている開発ボードはArduino UNOで、WiFiモジュールはESP826がベースになっていることがわかりました。Arduino IDEは、ビルディングブロックのプログラミングが制限されすぎているため、これを選択しました。

Arduino IDEの設定は、makeBlockライブラリのインポートとESP8266の開発環境の設定の2つのステップで行う必要があります。

Arduino IDEの設定方法は、こちらのチュートリアルをご覧ください。

https://jingyan.baidu.com/article/8065f87f904f4c2331249881.html (Arduinoの外注先であるmakeBlockライブラリをインポート)

https://www.cnblogs.com/kekeoutlook/p/8216639.html (ESP8266の開発環境の設定)

ESP8266モジュール全体とArduinoのロジックはこんな感じです。ESP8266はマイコン、Arduino UNOはマイコン、解決しなければならないのはESP8266とArduinoの間の通信と通信の問題です。全体の手順は次のとおりです。

1. ESP8266のコードを書き、焼き付ける。

2. Arduino用のコードを書き、焼き付ける

3. ESP8266と通信するためのJavaコードを書く

ステップ1.

まず第一に、あなたはコンピュータにESP8266モジュールを接続するためにTTLコンバータにUSBを購入する必要があり、所有者はここでUARTシリアルモジュールCP2102 usb TTL485相互変換モジュールにUSBのモデルを選択し、淘宝網検索が可能です、もちろん、あなたは別のこれを選ぶことができます下の写真です。スイッチの使用では、オンにする必要があります。具体的な接続方法は、インターネットでの検索が多いようです。次に、燃焼用Arduinoにコードコードをコピーする Arduionも多くのサンプルを提供し、ちょうど次のブロガーのコードです変更します。


#include <ESP8266WiFi.h>

const char* ssid = "接続する必要があるWIFIのESP8266 SSID";
const char* password = "Wifiパスワード"。


void setup() { <未定義
  Serial.begin(9600)を実行します。
  delay(10);

  // WiFiネットワークに接続するところから始めます。

  Serial.println()を実行します。
  Serial.println()を実行します。
  Serial.print("接続中 ")。
  Serial.println(ssid)を実行します。
  /* ESP8266をWiFiクライアントにするよう明示的に設定します(それ以外はデフォルト)。
     は、クライアントとアクセスポイントの両方として動作しようとし、その結果
     WiFiネットワーク上の他のWiFiデバイスとのネットワーク問題。*/
  WiFi.mode(WIFI_STA)。
  WiFi.begin(ssid,password)。
  while (WiFi.status() ! = wl_connected) { <未定義
    delay(500)を実行します。
    Serial.print(".")を実行します。
  }

  Serial.println("")。
  Serial.println("WiFi connected")。 
  Serial.println("IPアドレス: ")。
  Serial.println(WiFi.localIP())を実行します。

}

int whetherConnect = 0;
WiFiClientクライアントです。
const uint16_t port = 8082;
const char * host = "あなたのIP";// IPまたはDNS

void loop() { <未定義
    if(client.connected()==true)とする。
         whetherConnect=1;
      さもなくば
         whetherConnect=0;    
    if(whetherConnect==0)
    { 
        Serial.print("接続中 ")。
        Serial.println(host)。
        if (!client.connect(host, port)) { <未定義
            Serial.println("接続に失敗しました")。
            Serial.println("5秒待つ... ")を実行。
            delay(5000)です。
            を返します。
        }
        さもなくば
        { <未定義
          whetherConnect =1;
        }
    }

    if(Serial.available())
    { <未定義
       if(Serial.read()=='#')
       { <未定義
        int n = WiFi.scanNetworks();
        Serial.println("スキャン完了")。
        if(n==0)
        { 
          client.println("no networks found")を実行します。
          delay(200)です。
        }  
        さもなくば
        { <未定義
          client.print(n)。
          client.println(" networks found")。
          delay(500)です。
          for (int i = 0; i < n; ++i)
          { <未定義
            // 見つかったネットワークごとにSSIDとRSSIを表示する
            // client.print(i + 1);
            //client.print(": ")を実行します。
            client.print(WiFi.SSID(i))。
            delay(500)です。
            client.print(" ")。
            delay(500)です。
            client.println(WiFi.RSSI(i))を実行します。
             delay(500);
           // client.print(")");
            // client.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)? " ":"*") のようになります。 
          }
        }
        // これはサーバーにリクエストを送信します
        client.println("------------------------------------------");
        //サーバーから1行読み返す
        //String line = client.readStringUntil('\r');
        /Serial.println(line)を実行します。
        /Serial.println("接続を閉じる")。
        //client.stop()を実行します。
       // Serial.println("wait 5 sec... ")を実行します。
      // delay(5000);
      }
   }
}

書き込みに成功したら、プラグを抜きます(うまくいかなくても慌てずに、シリアルポートを抜いて、コンピュータに2回挿し直せばOKです)。

2. Arduino UNOにコードを書き込む。

これはみんな知っていると思うので、さっそくコードを見てみましょう。


#include <MeMCore.h>
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>

MeUltrasonicSensor ultrasonic_3(3)です。
MeDCMotor motor_9(9)。
MeDCMotor motor_10(10)です。
double currentTime = 0;
double lastTime = 0;
double getLastTime(){ <未定義
  return currentTime = millis() / 1000.0 - lastTime;
}
void move(int direction, int speed) { <未定義
  int leftSpeed = 0;
  int rightSpeed = 0;
  if(方向 == 1) { <未定義
    leftSpeed = speed;
    rightSpeed = speed;
  } else if(direction == 2) { <未定義
    leftSpeed = -speed;
    rightSpeed = -speed;
  } else if(direction == 3) { <未定義
    leftSpeed = -speed;
    rightSpeed = speed;
  } else if(direction == 4) { <未定義
    leftSpeed = speed;
    rightSpeed = -speed;
  }
  motor_9.run((9) == M1 ? -(leftSpeed) : (leftSpeed));
  motor_10.run((10) == M1 ? -(rightSpeed) : (rightSpeed));
}
MeBuzzer ブザーを鳴らす。
double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
int RxPin[]={12,10,A3,A1};
int TxPin[]={11,9,A2,A0};
SoftwareSerial mySerial(RxPin[4-1],TxPin[4-1])。

void _delay(float seconds) { <未定義
  long endTime = millis() + seconds * 1000;
  while(millis() < endTime) _loop()。
}

void setup() { <未定義
  mySerial.begin(9600)。
  Serial.begin(9600)です。
  delay(5000);
}

void _loop() { <未定義
}

int sendOrNot=0;

void loop() { <未定義
  if(ultrasonic_3.distanceCm() < 50){. <未定義
      motor_9.run(0)を実行します。
      motor_10.run(0);//Stop Running
      if(sendOrNot==0)
      { <未定義
        buzzer.tone(262, 0.25 * 1000);
        delay(20);
        mySerial.println("#") を実行します。
        sendOrNot=1です。
      }
      if(getLastTime() > 15){// If timer is bigger than 5
          移動(3, 50 / 100.0 * 255)。
          _delay(1)。
          move(3, 0)です。

      }

  }else{ <未定義
      sendOrNot=0とする。
      lastTime = millis() / 1000.0;
      move(1, 50 / 100.0 * 255)を実行します。

  }

  _loop()です。
}

私はいくつかのバリエーションを持っているmBotのマザーボードを使用しているので、ここであなたのコードは確かに私と同じにすることはできません あなたはArduino UNOを使用している場合は、自分自身のためにArduino IDEによって与えられたサンプルを見ることができます。もちろん、あなた自身を記述する必要があるシリアルポートは、コンテンツBaiduのこの作品は、多くのことを持つことができるようになります。

3. Javaプログラムを書くことができる。 

ブログ主はJavaのソケット通信を利用しているので、詳しい説明は省略します。

import java.io.*;
import java.net.ServerSocket;
import java.net;

public class ServerCode{
    private static final int SERVER_PORT = 8082;
    private static File writeName = new File("Radiomap.txt");

    public static void main(String args[])
    {
        try{
            writeName.createNewFile();
            FileWriter writer = new FileWriter(writeName);
            BufferedWriter out = new BufferedWriter(writer);
            System.out.println("Server: Connecting..1111111");
            ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
            InputStream socketInput;
            Socket clientSocket = serverSocket.accept();
            System.out.println("Server:Receiving... ");
            while(true){

                try {
                    socketInput = clientSocket.getInputStream();
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(socketInput)
                    );
                    String str = in.readLine();
                    //System.out.println("111111111");
                    System.out.println("Server:Received: '"+str+"'");
                    out.write(str+"\n");
                    out.flush();
                }catch(Exception e){
                    System.out.println("Server:Error");
                    e.printStackTrace();
                }
              /* finally {
                    clientSocket.close();
                    System.out.println("Server:Close.");
                }*/
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}


Next, connect the Arduino to the ESP8266 and you're ready to go! 

After starting the car and java program, you will find that the car will stop at every place where there is an obstacle and collect RSSI and SSID for transmission, and you can see it on the Java side.

The blogger's project has special characteristics for reference only! If there is anything wrong, please point out. Do not spray if you do not like!