前提・実現したいこと
二つのesp32を用意して、片方をAPモードでサーバーとし、片方をクライアントとしてデータのやり取りを
したいと思っています。
クライアント側で適当なピンをAD変換しそのデータをサーバー側に送ろうと思います。
適当なピンをanalogReadでデジタル値として読み取ります。
analogReadのデフォルトの分解能は12bitなので0~4095の整数値を得ます。
このデータをサーバーに送信するにあたり、client.read()は1バイトごとにしか読み取ることが
出来ないので、analogReadで読み取った値をuint8_t型として送信しています。
試しにmap()関数を用いて12bitの値を8bitに変換してuint8_t型と比較したのですが、値が変わって
しまう理由が分かりません。
また、データの送受信にはどちらが最適なのでしょうか?
発生している問題・エラーメッセージ
エラーメッセージはありません。
該当のソースコード
arduino
1/*server側*/ 2#include<WiFi.h> 3const char *ssid="ESP32-WiFi"; //SSID 4const char *pass="esp32wifi"; //パスワード 5const IPAddress ip(192,168,0,9); //サーバーのIPアドレス 6const IPAddress subnet(255,255,255,0); //サブネットマスク 7WiFiServer server(80); 8void setup() 9{ 10 Serial.begin(9600); 11 12 WiFi.softAP(ssid,pass); //SSIDとパスの設定 13 delay(100); //接続失敗防止 14 WiFi.softAPConfig(ip,ip,subnet); //IPアドレス、ゲートウェイ、サブネットマスクの設定 15 IPAddress myIP = WiFi.softAPIP(); //WiFi.softAPIP()でWiFi起動 16 server.begin(); //サーバーを起動(htmlを表示させるため) 17 Serial.println(); 18 /*各種情報を表示*/ 19 Serial.println("WiFi connected"); 20 Serial.print("SSID:"); 21 Serial.println(ssid); 22 Serial.print("AP IP address:"); 23 Serial.println(myIP); 24 Serial.println("Server start!"); 25} 26 27uint8_t value; 28 29void loop() 30{ 31 //接続したクライアントの情報を得る。 32 WiFiClient client = server.available(); 33 if(client){ 34 Serial.println("new client"); 35 while(client.connected()){ 36 if(client.available()){ 37 38 value=client.read(); 39 Serial.println(value,sizeof(int)); 40 delay(1000); 41 } 42 } 43 44 } 45 46} 47------------------------------------------------------------------------- 48/*クライアント側*/ 49#include<WiFi.h> 50const char *ssid="ESP32-WiFi"; //サーバーのSSID 51const char *pass="esp32wifi"; //サーバーのパスワード 52static WiFiClient client; //WiFiClient型でclientと宣言 53 54void setup() { 55 Serial.begin(9600); 56 WiFi.begin(ssid,pass); //サーバーに接続 57 Serial.printf("\n"); 58 while(WiFi.status()!=WL_CONNECTED) 59 { 60 Serial.print("."); 61 delay(1000); 62 } 63 Serial.printf("\n"); 64 Serial.println("WiFi Connected"); 65 IPAddress ip(192,168,0,9); //サーバーのIPアドレス 66 client.connect(ip,80); //IPアドレスとポート番号を指定して接続 67} 68//試しに4バイトの値を送信 69int value=35454; 70void loop() { 71 72 73 74 delay(1000); 75 if(client.connected()==true) 76 { 77 client.write((uint8_t*)&value,sizeof(int)); 78 } 79}
試したこと
いきなりAD変換の値を送信せずにまず4バイトの整数を送信してみました。
補足情報(FW/ツールのバージョンなど)
4バイトの整数を送信してみた結果を追加しました。
/シリアルモニタの出力/
WiFi connected
SSID:ESP32-WiFi
AP IP address:192.168.0.9
Server start!
new client
1332
2022
0
0
1332
2022
0
0
1332
2022
0
0
回答2件
あなたの回答
tips
プレビュー