ESP8266とArduinoの入門チュートリアル
ブログ主も初心者で、ネット上の情報が少ないため、全てのロジックを整理するのに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!
関連
-
undefinedプッシュ問題マスター -> マスター (フェッチファースト)
-
jsについて Uncaught TypeError: null issue のプロパティ 'style' を読み取ることができません。
-
error MSB3073: 変更された場所
-
IntelliJ maven プロジェクト pom ファイル エラー xx.jar の成果物記述子の読み込みに失敗した問題 解決方法
-
laydate が表示される laydate が定義されていない
-
ハウジング・エンド ボブ・オストヴィッチ
-
Eclipseオンラインインストールエラー インストールするアイテムの収集中にエラーが発生しました。
-
Linux fork: 再試行: リソースが利用できないため、ログインの解決策にならない
-
gitbash は次のように報告し続けます: sh: __git_ps1: コマンドが見つかりません 解決策 --- 検証中
-
コマンドラインが長すぎる。...またはSpring Bootのデフォルト設定のためにコマンドラインを短くするか、Spring Bootのデフォルト設定のためにコマンドラインを短くする。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
リスト解決にリスト("str "ではない)を連結することだけができる
-
Tensorflow】エラー報告の落とし穴--入力配列を形状(100,784)から形状(100)にブロードキャストできなかった。
-
operator=' にマッチしない(オペランドの型が 'std::vector<float>' と 'float' である)。
-
エラーが発生しました。現在のライセンスファイルは EP1C6Q240C8/EP3C10E144C8 デバイスをサポートしていません。
-
モジュール 'numpy' に 'array' 属性がない問題の解決
-
CMake がターゲットのリンカー言語を決定できない:Intro
-
user` オプションの使用を検討するか、パーミッションを確認してください。
-
Spring boot jpaのフィールド障害問題を使用する
-
linux reports error is not a directory
-
com.github.dcendents:android-maven-gradle-plugin:1.5 バージョンに対応します。