ESP-WROOM-02のボーレートをファーム変更

このQ&Aのポイント
  • H8Sマイコンの動作周波数とESP-WROOM-02の通信速度が合わず、文字化けの問題が発生しています。
  • ESP-WROOM-02のデフォルトの通信速度を変更する方法を教えてください。
  • H8S2368をATコマンドで制御し、通信スピードを38.4kHzに合わせたいのです。
回答を見る
  • ベストアンサー

ESP-WROOM-02のボーレートをファーム変更

現在、wifiモジュールのESP-WROOM-02とH8S2368マイコンをUART接続して通信をwifi化したいと考えております。 H8S2368をESP-WROOM-02のATコマンドで制御したいのですが、H8Sマイコンの動作周波数が19.66MHzでESP-WROOM-02のデフォルトの通信bpsが115.2kHzなので、それに近い通信スピードに合わせたのですが、115.2kHzぴったりとはいかず、PCにつないでも文字が化けてしまう問題が発生します。 もともと38.4kHzだと問題ないので、そのbps速度を使用したいのですが、ESP-WROOM-02のファームウェア改造などでデフォルトの速度を115.2kHzではなく38.4kHzに変更させる方法などありましたら、ご教示頂きますようよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • trytobe
  • ベストアンサー率36% (3457/9591)
回答No.1

この手順で「ESP FLASH DOWNLOAD TOOL」を通じて、ファームウェアの再構築&デフォルトのボーレートの書き込みができるかと思います。 ねむいさんのぶろぐ ESP-WROOM-02を使ってみる2 -外付けSPIフラッシュの書き換え- http://nemuisan.blog.bai.ne.jp/?eid=215341 『: Download Panel1のSTARTボタンを押すと書き込みが始まります。 このときDETECTED INFOの項目にSPI-FLASHのデバイスIDが表示され、実際に32MBitの 品種が搭載されているのが分かります。 :』

techhouse
質問者

お礼

回答頂きありがとうございます。 ”AT+UART_DEF”というコマンドがあり、これで34.8kbpsを設定するとフラッシュメモリにその設定を書き込んでくれる機能がありました。 いろいろと詳細頂き助かりました。

関連するQ&A

  • TeraTermでATコマンドを一気に送信したい

    現在ESP-WROOM-02というwifiモジュール基板とPCとをシリアル通信ケーブルで結んで、ESP-WROOM-02の内部設定でwifiのAPのSSID設定などを行いたいと思っています。 【第33回 Arduinoマイコンとしても使える小型WifiモジュールESP-WROOM-02を使ってみる(Wifi通信テスト編) | http://deviceplus.jp/hobby/entry0033/】 上記のサイトで、ATコマンドを送信する際にはArudino IDEというソフトを使用して、設定したATコマンド文字列を一括で送信してくれるような機能があるようなのですが、このような機能をTeraTermでも使用できますでしょうか? どうぞご教示頂きますよう、よろしくお願い致します。

  • H8SマイコンでUARTを115.2kに設定したい

    現在、H8S2368マイコンとwifi通信モジュールであるESP-WROOM-02をUART通信で接続するためにプログラムを作成しています。 H8S2368のSCI0のUARTでESP-WROOM-02とをつなぎました。 とりあえずSCI0から”AT”というコマンドを出したのですが、wifiモジュールから”OK”という回答が戻ってきません。 原因を調べてみると、H8S2368のSCI0は38.4kbpsで出力していて、ESP-WROOM-02は初期通信速度が115.2kで速度があっていないことが判りました。 とりあえずH8S2368のSCI0を115.2k変更したいのですが、どのようにすれば115.2kbpsに変更できるのか教えていただきますよう、よろしくお願い致します。 現在のSCI0のUARTに関する設置はこちらです。 (hwsetup.c) SCI0.SCR.BYTE = 0x00; SCI0.SMR.BYTE = 0x00; SCI0.BRR = 15; for(i=0;i<30000L;i++); /* Async, 8-data, odd-parity, 1-stop, N-multi, CLK */ SCI0.SCR.BIT.TE = 1; /* Transmit Enable */ SCI0.SCR.BIT.RE = 0; /* Receive Enable */ SCI0.SCR.BIT.RIE = 1; /* Receive Interrupt */ SCI0.SCR.BIT.TIE = 0; /* Transmit-data-empty Interrupt */ SCI0.SCR.BIT.TEIE = 0; /* Transmit End Interrupt */ SCI0.SSR.BIT.TDRE = 0; /* Clear TDR Empty flag */ H8S2368のデータシートを見ていると、 SCI0.BRR = 15; このBBRレジスタに代入する値をもう少し下げていけば115.2kHzに近づいていくのかなぁ、と感じるのですが、正確な計算方法など教えていただけると助かります。

  • WiFIモジュールの同時接続

    現在WiFiモジュールESP-WROOM-02を複数台用いて、データを無線で通信するテストを実施しています。構成はノートPCとWiFiアクセスポイントとESP-WROOM-02が2台(Module AとModule Bとします。)です。 ModuleA及びModuleBをアクセスポイントに接続後,ノートPCにデータをUDPで送信するようにプログラムしています。 モジュールの電源を1台ずつ投入して動作させた場合は問題なくデータ送信できました。 またModuleAの電源を投入してからModuleBの電源を投入しても問題なくデータ送信できました。 しかし,ModuleBの電源を投入してからModukeAの電源を投入するとModuleAはアクセスポイントに接続できなくなり、もちろんデータも送信できなくなりました。 このようにWiFiモジュールの多数接続時は電源投入の順番を考慮する必要があるものなのでしょうか?それとも何かが原因で上記のような症状が発生するのでしょうか?

  • ESP-WROOM-02の透過モード時のデータ長

    現在wifiモジュール基板のESP-WROOM-02で、今までイーサネットポートしかもっていなかった端末機の残っていたUARTポートを利用してwifi通信を行えるようにしたいと考えています。 現在、端末側からESP-WROOM-02に対してwifi APの設定と接続先サーバの設定を完了して、30秒に1回程度送信するための1.2kByte程度のパケットデータをESP-WROOM-02の透過送信モードを使用して送信しようとしています。 受信側のサーバPCでWiresharkを起動して、データの受信状況を確認したのですが、 イーサーネット側で送信していた場合は1.2Kbyte程度のパケットデータ長だったのですが、ESP-WROOM-02で送信してみるとなぜか48Byteのパケットデータ長になってしまい、1.2Kbyteで構成されているデータの頭の4バイトのみしか送信できていないことが分かりました。 1.2KByteの”Packet”というデータパケットは、イーサネットポートからパケットを出力している際には send(s+1,(BYTE *)Packet,sizeof(TEST_PACKET)); このように送信していたところを wifiModuleSendAT((BYTE *)Packet,200); 今回wifi送信のための関数として作成した”wifiModuleSendAT”に入れて送信しました。200という引数は、この端末で使用しているucosのペンディング時のエラーとしてのポストのタイムアウト時間です。 send関数の場合、引数としてパケットサイズを見るsizeof(TEST_PACKET)を渡している部分がありますが、wifiModuleSendAT関数ではこの部分がないのですが、パケットサイズを引数として渡さなくてはいけませんでしょうか? どうぞ、ご教示頂きますようよろしくお願い致します。 wifiModuleSendAT関数のコード u8 wifiModuleSendAT(u8 * cmd,int timeOutTime) { int i; u8 err; u8 * pC; int checkLen; checkLen = strlen(cmd); for(i = 0 ; i < strlen(cmd) ; i++) wireless_put_for_Wifi_data(cmd[i]); OSSemPend(WifiRxData, timeOutTime, &err); memset(g_wire_cmd,0,sizeof(g_wire_cmd)); if(err != 0) { memset(g_wire_rx_buf,0,MAX_WIRELESS_BUF); return false; //continue; } pC = strtok(g_wire_rx_buf," "); i=0; while(pC != NULL) { strcpy(&g_wire_cmd[i][0],pC); pC = strtok(NULL," "); i++; } memset(g_wire_rx_buf,0,MAX_WIRELESS_BUF); if(err == 0) { if(strstr(cmd,"AT+CIPSEND") != NULL) { return TRUE; } if(strstr(cmd,"AT+CWJAP") != NULL) { return TRUE; } if(strstr(cmd,"AT+CIPSTART") != NULL) { return TRUE; } if(strstr(cmd,"AT+CIFSR") != NULL) { return TRUE; } if(strstr(g_wire_cmd[0],"OK") != NULL) { return TRUE; } } return FALSE; }

  • 簡易のTCPサーバのフリーソフト

    現在、ESP-WROOM-02というwifiモジュール基板とPCとをUART通信で接続しました。 jumpwire.io http://ja.docs.jumpwire.io/ESP8266Reference/ATCommands/ 現在事務所内で使用しているサーバーソフトが起動しているPCのIPアドレスへwifiモジュールを使用して通信を行おうと思い、上記のサイトを参考に、 ”透過送信モード”というモードにATコマンドを送信して設定してサーバーと接続を試みているのですが、 AT+CIPSTART="TCP","192.168.1.158",5000 このコマンドで192.168.1.158:5000で動作させているサーバと接続コマンドを送って”CONNECT”と応答が返ってくるのですが、、5秒程度経過すると”CLOSED”という応答が来てしまいます。 現在この自動でCLOSEDされてしまう問題を調べているのですが、 私は”このサーバ特有の仕様”と現在考えています。 この問題の切り分けとして、別のサーバソフトで接続してみても同様に自動切断されてしまうのかを調べたいと思っているのですが、 このような時に便利な簡易サーバのフリーソフトツールなど、ご教示頂きますよう、よろしくお願い致します。 (透過送信モード時の送信・応答内容) ready WIFI CONNECTED WIFI GOT IP (PC送信)AT (ESP応答)OK (PC送信)AT+CWMODE=3 (ESP応答)OK (PC送信)AT+CWJAP="Buffalo-G-884C","h3htu788pwh3u" (ESP応答)WIFI DISCONNECT (ESP応答)WIFI CONNECTED (ESP応答)WIFI GOT IP (ESP応答)OK (PC送信)AT+CIFSR (ESP応答)+CIFSR:APIP,"192.168.4.1" (ESP応答)+CIFSR:APMAC,"5e:cf:7f:09:c8:76" (ESP応答)+CIFSR:STAIP,"192.168.1.90" (ESP応答)+CIFSR:STAMAC,"5c:cf:7f:09:c8:76" (ESP応答)OK (PC送信)AT+CIPSTART="TCP","192.168.1.158",5000 (ESP応答)CONNECT (ESP応答)OK (ESP応答)CLOSED (PC送信)AT+CIPSTART="TCP","192.168.1.158",5000 (ESP応答)CONNECT (ESP応答)OK (PC送信)fefe (ESP応答)ERROR (ESP応答)CLOSED (PC送信)AT+CIPMODE=1 (ESP応答)OK

  • pocket wifiの通信速度

    今pocket wifiを使いたいと思っていろいろ調べて見たところ、通信速度で「上り最大~bps」や「下り最大~bps」という説明があるのですが、このbpsはデータ転送速度の単位だと思うのですが、「上り」と「下り」が何なのかがよくわかりません。 回答よろしくお願いします。

  • RS232とRS485の切替

    マイコンにRS232とRS485で制御可能な機器を各1台接続したいと考えています. マイコンにはUARTポートが1個しかありませんので,リレーまたはフォトカプラで信号線を切り替えて通信しようと考えていますが、問題ないでしょうか? 通信は常にマイコンから各機器に送信されるようにする予定です.

  • 制御プログラム

    私はマイコンの勉強をしているのですが(今できるのはPICだけです)私の今のマイコンのイメージでいくと、タイマーやPWMやシリアル通信などの内蔵モジュールを使っていろいろ制御をする感じなのですが、求人などに良くあるファームウエアやドライバとは実際どのような感じで出来ているのでしょうか。 内臓モジュールを使って作っているのでしょうか、またリアルタイムOSなどの通信などのライブラリとかがあってそれをを使っているのでしょうか、全部自分で作っているのでしょうか、いろいろなパターンがあるとは思いますが、だいたいどんな感じなのでしょうか。

  • H8S2368マイコンのTCSR_1レジスタの4ビット目が1のはずなのに0と表示される。

    いま、H8S2368マイコンのプログラムを作っているのですが、 TCSR_1レジスタの値を printf("data:%X addr:%p\n\r", TMR1.TCSR.BYTE,(void*)&TMR1.TCSR.BYTE); このプログラムでリードしてみて、UART通信で受信したところ ”data:C0 addr:ffffb3” このレジスタのデータが0xC0というのを確認しました。 このH8S2368マイコンのデータシートの502ページ目(rjj09b0162_h8s2368.pdf)では、このレジスタの4ビット目はリザーブビットで、リードすると必ず”1”が読み込まれると書かれているのですが、なぜかそのビットが”0”で帰ってきます。 ”0xD0”ならばわかるのですが、これはなぜなのでしょうか?

  • winsock 2.0 のデータ伝送速度は?

    お世話になります。 VC++でwinsockを実装して、PC間データ通信のプログラムを作りました。 疑問に思ったのが、その場合のデフォルトの伝送速度はどのくらいになりますか?(bps) また、その速度を変えるにはどう設定すればいいのですか? ご教授下さい。