Arduino M0 ProとESP-WROOM-02(を用いたwifiへの接続ができません
Arduino M0 Proに以下に示すプログラムをArduino IDE 1.8.0で書き込み、
Wifiへ接続を試みているのですが、
シリアルモニタ上に「......」と表示されるのみ(待機中の意味)でwifiへの接続が確率出来ません。
解決のために試したことを以下に示しているので、ご参照いただけますと幸甚に存じます。
発生している問題
Arduino M0 ProとESP-WROOM-02を用いたwifiへの接続ができないです。
何か解決のアイデアなどございましたらぜひご教授ください。
該当のソースコード
// ライブラリの読み込み
#include "ESP8266.h"
#include "Milkcocoa.h"
#include "Client_ESP8266.h"
// 転送スピード
#define SERIAL_SPEED 115200
/************************* WiFi Access Point *********************************/
// Wi-Fi SSID
#define WLAN_SSID "Daimon5"
// Wi-Fi PASSWORD
#define WLAN_PASS "Admiral2128"
/************************* Your Milkcocoa Setup *********************************/
// MilkcocoaのアプリID
#define MILKCOCOA_APP_ID "uniixstvro4"
// Data Store名
#define MILKCOCOA_DATASTORE "toilet"
/************* Milkcocoa Setup (you don't need to change this!) ******************/
#define MILKCOCOA_SERVERPORT 1883
/************ Global State (you don't need to change this!) ******************/
// Create an ESP8266Client class to connect to the MQTT server.
ESP8266Client wifi;
const char MQTT_SERVER[] PROGMEM = MILKCOCOA_APP_ID ".mlkcca.com";
const char MQTT_CLIENTID[] PROGMEM = __TIME__ MILKCOCOA_APP_ID;
Milkcocoa milkcocoa = Milkcocoa(&wifi, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID);
// センサーを接続するピン
const int sensorPin = A0;
// 光センサーの閾値
const int threshold = 500;
// 現在の明るさを保持
boolean nowSensorState = false;
// 切り替え前の明るさを保持する
boolean sensorState = false;
void setup() {
// パソコンとのシリアル通信のポートを開ける
Serial.begin(SERIAL_SPEED);
// Wi-Fiモジュールとのシリアル通信のポートを開ける
Serial1.begin(SERIAL_SPEED);
// Wi-Fi設定
setupWiFi();
// Milkcocoaへ光センサーの値がpushされた
milkcocoa.on(MILKCOCOA_DATASTORE, "push", milkcocoaPushDataHandler);
}
/*
Wi-Fiを設定します
*/
void setupWiFi() {
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
// シリアルポートの指定
wifi.begin(Serial1);
// Wi-Fiへ接続(成功するまで処理を繰り返す)
while (!wifi.joinAP(WLAN_SSID, WLAN_PASS)) {
delay(500);
Serial.print(".");
}
Serial.println("Wi-Fi connected");
Serial.println("IP address: ");
// Wi-FiのローカルIPアドレスをシリアルモニターへ表示
Serial.println(wifi.getLocalIP().c_str());
}
/**
* ループ処理
*/
void loop() {
// Milkcocoaのループ処理を実行
milkcocoa.loop();
// センサーの値
int sensorValue = analogRead(sensorPin);
Serial.print("Sensor Value : ");
Serial.println(sensorValue);
// センサーの値と閾値を比較
nowSensorState = sensorValue > threshold;
// 明るさに変化がなければloop()関数の始めに戻る
if (sensorState && nowSensorState || !sensorState && !nowSensorState) {
return;
}
// Milkcocoaへ送信するデータを作成
DataElement elem = DataElement();
// lightというデータ名で値を追加
elem.setValue("lightState", nowSensorState);
// Milkcocoaへデータを送信
milkcocoa.push(MILKCOCOA_DATASTORE, &elem);
// 1秒処理を止める
delay(1000);
}
/*
* Milkcocoaへ光センサーの値がpushされた
*/
void milkcocoaPushDataHandler(DataElement *pelem) {
// 明るさの状態を更新
sensorState = nowSensorState;
}
試したこと
(2017.1.17)
1.スマートフォンのテザリング
2.自宅のwifi
複数のwifiに対し通信を試みたのですが、いずれもシリアルモニタには「……」と接続待機中の表示のみが表示され、接続完了後の動作を行ってくれません。
(2017.1.19)
matobaa様からのご回答を参考に、
WROOM-02とPCを繋げてATコマンドで速度を9600に下げてやってからArduinoに接続いたしました。Arduinoと接続した状態で、プログラムも速度を9600に書き換えた際のシリアルモニタ上でプログラムの実行内容「……」が表示されたので、ATコマンドによる設定速度がWROOM-02に保存されている状態だと思いますが、症状変わらず、自宅のwifi,スマホのテザリング共に接続されませんでした。
そこで、試しに以下URLの通りにWROOM-02で自宅のwifiおよびスマホのテザリングに接続しようとすると下の結果に示すようにERRORと表示されたため、WROOM-02に何か原因があるのかと考えております。お手数おかけいたしますが、上記を踏まえたご意見をいただけますと幸甚に存じます。
WROOM-02の速度変更(http://www.mkbtm.jp/?p=618)
AT
OK
AT+CWJAP="bobby bobby","555512345"
ERROR
AT+CWJAP="Daimon5","e9799b94b2f9"
ERROR
(2017.1.21追記)
・CH340G USB to TTL(converter module)というケーブルを用いてESP-WROOM-02へ3.3vの電源供給をしながら、電流値も80mA付近まで流れていることを確認いたしました。
・AT+CWLAPによって、ESP-WROOM-02が認識している利用可能なWifiを一覧表示させようと試みましたが、以下にに示すようにERRORと返ってきました。
AT+CWLAP
ERROR
CH340G USB to TTL
https://www.google.co.th/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjP_P_Iz9PRAhUBLI8KHUfZBcYQFggYMAA&url=http%3A%2F%2Fwww.thaieasyelec.com%2Fen%2Fhome%2Fch340g-usb-to-ttl-converter-module-detail.html%3Ftmpl%3Dcomponent%26flexiblelayout%3Dprint&usg=AFQjCNEqD07AFWnMVDN1Cfam3Tqb9-_pSg
補足情報(言語/FW/ツール等のバージョンなど)
Arduino M0 ProとESP-WROOM-02(ピッチ変換済みモジュール)は
日本のスイッチサイエンスで購入し、現在タイ(バンコク)で使用しているのですが、それが問題なのでしょうか。。。(自分で調べたところ、ESP-WROOM-02は802.11 b/n/g)に対応しているのでそこは問題ではないとは思うのですが…
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
参考になるかわかりませんが、自分はESP-WROOM-02 Wifi shieldというものを使い開発しました。
その時に使ったWifi接続のコードを貼り付けておきます。
#include <HttpClient_ESP8266_AT.h>
// Arduino UNO の場合は、例えばデジタル入出力の 2 番, 4 番ピンを利用して
// ESP-WROOM-02 とシリアル通信するように設定します。
const byte rxPin = 2; // Wire this to Tx Pin of ESP8266
const byte txPin = 4; // Wire this to Rx Pin of ESP8266
HttpClient_ESP8266_AT httpClient(rxPin, txPin);
void setup() {
// PC と通信する HardwareSerial の baudrate を設定します。
// ESP-WROOM-02 の baudrate とは関係ありません。
Serial.begin(9600);
// ESP-WROOM-02 との接続確認を行います。
while(true) {
if(httpClient.statusAT()) {
Serial.println("AT status OK");
break;
}
else {
Serial.println("AT status NOT OK");
}
delay(1000);
}
// SSID と PASSWORD でアクセスポイントに接続します。
while(true) {
if(httpClient.connectAP("SSID", "PASSWORD")) { // <- 書き換えてください。
Serial.println("Successfully connected to an AP");
break;
}
else {
Serial.println("Failed to connected to an AP. retrying...");
}
delay(1000);
}
}
void loop() {
// 本サンプルでは特に通信はせず、WiFi の接続が切れていないかどうかを
// 1 秒毎に確認して結果を出力しつづけます。
if(httpClient.statusWiFi()) {
Serial.println("WiFi status OK");
}
else {
Serial.println("WiFi status NOT OK");
}
delay(1000);
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
http://qiita.com/umi_kappa/items/639d3f2e91e368adbcb6
http://www.mkbtm.jp/?p=640
あたりをみると、115200bpsだとArduino側が根を上げて通信できないみたいです。
手元では未確認ですが、WROOM-02とPCを繋げてATコマンドで速度を下げてやってからArduinoに接続すればよいでしょう。
おっと、速度の設定ってWROOM-02側に保存されるのだろうか?? SSIDなど保存されることは確認済ですが、速度まで保存されるかは未確認です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
既に問題となっていないと思われますが、『シリアルモニタ上に「......」』の事象(=WROOM-02とシリアル通信できていない)を解決できたので書き込みいたします。
Arduino M0 Pro
Arduino IDE 1.8.5
PCとシリアル通信して速度を9600に変更したWROOM-02を利用。
この状態で事象が発生しました。
解決方法
ESP8266.hの以下で指定されている速度を書き換え。
書き換え前:void begin(HardwareSerial &uart, uint32_t baud = 115200);
書き換え後:void begin(HardwareSerial &uart, uint32_t baud = 9600);
元のソースの
// Wi-Fiモジュールとのシリアル通信のポートを開ける
Serial1.begin(SERIAL_SPEED);
ここの部分よりヘッダファイルの方が優先されているようです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.13%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
matobaa
2017/01/17 09:53
ソースコードは ``` でくくってくださると読みやすいです。
bobby2128
2017/01/17 10:14
アドバイスいただき誠にありがとうございます!ご指摘の通り、修正させていただきました。便利な機能があったのですね…ありがとうございます。
ozwk
2017/01/20 08:27
'''じゃないです```です
bobby2128
2017/01/20 09:45
ozwk様 ご連絡いただき誠にありがとうございます。アドバイスいただき誠にありがとうございます!ご指摘いただいた通り修正いたしました!