最近、Arduinoをいじっていくつかのセンサーを接続し始めました。 Arduino Nanoを使用して、温度、湿度、気圧、光レベルを測定しました。
データをデータベースに保存するために、Raspberry Piに接続した別のArduinoを使用して、2人のArduinoに話をさせました。 433MHzを介してワイヤレスで相互に接続します。
これはすべてうまく機能しますが、433 MHzの通信は必ずしも最も信頼性が高いわけではありません(送信を見逃すことがよくあります)。 ESP8266モジュールに出くわしたとき、それは通信に最適なソリューションのように思えました。 Raspberry PiからHTTP呼び出しを介して情報を引き出すことができたら、どれほどクールでしょうか?
何時間もいじって、さまざまなファームウェアをアップロードした後、できなかったためにますますイライラしました。なんでもできるようになりました。ついに、次のように接続されたFTDIモジュールを介して動作するようになりました。
MB102電源モジュールを使用して、ESP8266に必要な3.3vを提供します。適切な応答を得るには、MB102からFTDIモジュールのアースにアースを接続する必要があることがわかりました。その後、ATコマンドを送信して適切な応答を得ることができました。自宅のWifiに接続することもできます。
次にやりたいのは、Arduinoに接続することです。そのための非常に単純なスキーマ( http://blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/ )を見つけました。ここでは、RXをTXに接続し、TXをRXに接続します。 MB102を使用して、次のように接続しました:
これで、空白のスケッチをArduinoにアップロードしてから、FTDIモジュールを使用したときとまったく同じ方法で、シリアルモニターを再度使用してATコマンドを検出できるようになりました。
問題は、この方法では何も得られないことです。コンソールに自分のATコマンドすら表示されません。コマンドを送信するたびにESP8266が点滅します(ルーターに接続されたままで、FTDIを介して送信した情報を記憶している可能性があります)。 。?)
問題は、何が問題なのかということです。ArduinoからのTXも5vであり、3.3vに戻すには何かする必要があるという投稿をいくつか読みましたが、必須ではないというチュートリアルもたくさんあります。
回答
これらのデバイスを操作する最も簡単な方法は、接続することです。それらをArduinoピンのスペアペアに接続し、SoftwareSerialを使用して通信します(複数のUARTでArduinoの1つを使用している場合を除く)。SoftwareSerialは16MHzデバイスで最大9600ボー、8MHzデバイスで4800ボーで動作するため、必要になります。これに対応するようにESP8266を設定します。現在、115200ボーで出荷されています。ピン(0、1)でハードウェアUARTを使用できますが、Arduinoを再プログラミングすると、毎回一時的にESPを再接続する&を切断し、かなり早く古くなります。
新しいESPで私が行うことは次のとおりです(ESPを再フラッシュした場合は、最初にAT命令セットエミュレーターをダウンロードして再フラッシュする必要があります):
# To configure a new ESP module: # Connect the ESP and the FTDI as in your top diagram, set your # terminal-emulator to 115200 baud, and enter the following: AT # ESP should respond "OK" AT+RST # Resets the ESP AT+UART_DEF=9600,8,1,0,0 # Sets ESP UART: 9600,N,8,1,no flow ctl # Now change the terminal emulator baud rate to 9600 AT+CWMODE=1 # Set ESP to station mode (client) ATE0 # Set ESP"s echo off AT+CWLAP # List access points - after a short pause # the ESP returns a list of WiFi access points
今後の参考のために、ここに ESP8266AT命令セットへのリンクがあります。
2020年6月の更新:上記のリンクが壊れていたため、修正されました。ドキュメントは Espressifのgithubアカウントにもあります(オンラインで読み取り可能ですが、修正されていません)。 pdf、この日付現在)。
コメント
- この質問は、6か月前の未回答の質問のアーカイブから削除されていることに気付きました。 。ああ、まあ、この答えは今またはすぐに他の誰かを助けるかもしれません。
答え
あるかもしれませんNanoFTDIチップからRX / TXおよびESP8266へのボーレートに関する問題。スケッチをアップロードするときに切断しましたか?
代わりにこれを試してみませんか?
乾杯!
コメント
- ESP8266を使用すると、115200ボーで動作し、それ以外はすべてゴミを出します。 。リンクされたブログのコードを'試しました(ボーレートを変更するだけです)。'がESP8266にコマンドを送信しているのがわかります。 (青色のライトが点滅)が、Serial.find(" > )コマンド。 ESP8266からのnou出力も表示されます。アップロード中にESP8266を切断しました。
回答
ここで優れたチュートリアルを見つけて試してみましたが、ジョブ: https://blogs.msdn.microsoft.com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/
コメント
- これは、置き換えられたCIOBAUDコマンドを除いて機能します。すべてのUART関数の現在のコマンドは、SoftwareSerialと互換性がある
AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol>
またはAT+UART_DEF-9600,8,1,0,0
です。 " _DEF "を" _CUR "この変更がセッション専用の場合。最初のコマンドで電源がオンになります。 - リンクが切れた場合は、そのブログの情報をこの回答に拡張してください。また、より適切な回答にすることもできます。
回答
はい、異なる電源を使用している場合は、常にアースを接続する必要があります。そうしないと、ボードは何を認識しません。ゼロボルトはです。
ArduinoのTXは5vです。5vを3.3vに変換するには、次のようなレベルシフターが必要です( https://shop.pimoroni.com/products/adafruit-4-channel-i2c-safe-bi-directional-logic-level-converter?utm_medium=cpc&utm_source=googlepla&variant=302017581&gclid=CPqujsPxlc0CFcYcGwodb8YIoA )
ESP8266のTXは3.3v、ArduinoのRXは5Vであり、これを処理するにはレベルシフターが必要です。 4つの高(5v)信号を4つの低(3.3v)信号に変換できるため、上記と同じものを使用してください。
抵抗を使用して変換できると言われていますが、私も読んだことがあります。高速スイッチングのデジタル信号を処理するのに十分なパフォーマンスを発揮しない(したがって、シリアルで300ボーは問題ないかもしれませんが、115000では問題ありません:))
また、レベルコンバーターは必要ないと言います。それは本当のことです しばらくの間それらがなくても機能しますが、遅かれ早かれ何かが飛び出します。電圧を上げるとプロセスがスピードアップするので、230v電源を接続した場合に何が起こるか想像できますUSBデバイスに直接接続します。
最後に、ESP8266が256KBのRAMを搭載した80 / 160MHzプロセッサであることをご存知ですか?Arduinoと比較すると、電話でPCをプログラミングするようなものです。 FTDIモジュールを介してESP8266を接続し、ArduinoCのArduinoIDEを介してプログラムすることを試みることができます。これは、このすべての接続よりもはるかに簡単です。