将数组从一个Nodemcu发送到另一个Nodemcu?

问题描述 投票:0回答:1

我正在做一个手势控制汽车项目,我发现互联网上每个人都使用RF模块或蓝牙模块来做,我周围有两个NodeMCU,所以我想为什么不使用它们并带来改变。但是我发现很难将加速度计值从一个Nodemcu发送到另一个,为了连接两个Nodemcu,我从这里寻求帮助

https://www.instructables.com/id/WiFi-Communication-Between-Two-ESP8266-Based-MCU-T/

因此,我尝试发送一个包含两个变量的数组,而不是一个字符串(但他们使用的是字符串),但是我无法从发送器向接收器发送/接收它。我花了很多时间,但是我认为我需要帮助。

我现在(今天早上才知道)Nodemcu只有一个模拟引脚,我已经订购了74HC4051 IC。因此,我尚未更改代码,因此请记住这一点。另外,我现在仅使用xAxis来测试是否正在发送数据,但不是。

如果还有其他更简单的方法来发送两个变量值,请提出建议。

这是实际项目,我向作者寻求帮助,但尚未答复。https://www.youtube.com/watch?v=svJwmjplm4c

我在下面提供了我现在拥有的编辑代码

发送方代码

#include <SPI.h>
#include <ESP8266WiFi.h>

int xAxis = A0;
int yAxis = D2;
int data[1];
int x;


int ledPin = D8;
char ssid[] = "********";               // SSID
char pass[] = "********";               // password I removed them while posting the question
WiFiServer server(80);                   

IPAddress ip(192, 168,1, 80);            // IP address of the server
IPAddress gateway(192,168,1,1);           // gateway of your network
IPAddress subnet(255,255,255,0);          // subnet mask of your network

void setup() {
  Serial.begin(115200);                   // only for debug
  WiFi.config(ip, gateway, subnet);       // forces to use the fix IP
  WiFi.begin(ssid, pass);                 // connects to the WiFi router
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  server.begin();                         // starts the server
  Serial.println("Connected to wifi");
  Serial.print("Status: "); Serial.println(WiFi.status());  // some parameters from the network
  Serial.print("IP: ");     Serial.println(WiFi.localIP());
  Serial.print("Subnet: "); Serial.println(WiFi.subnetMask());
  Serial.print("Gateway: "); Serial.println(WiFi.gatewayIP());
  Serial.print("SSID: "); Serial.println(WiFi.SSID());
  Serial.print("Signal: "); Serial.println(WiFi.RSSI());
  Serial.print("Networks: "); Serial.println(WiFi.scanNetworks());
  pinMode(ledPin, OUTPUT);
  }


void loop () {
  WiFiClient client = server.available();
  if (client) {
    if (client.connected()) {
      digitalWrite(ledPin, LOW);  // to show the communication only (inverted logic)
      Serial.println(".");
      client.flush();
      Serial.println("Data send");
      x= analogRead(xAxis);
      data[0]= analogRead(xAxis);
      client.println(data[x,yAxis]);
      Serial.println(x);
      Serial.println(data[0]); //This appears on the screen only if i have the line  data[0]= analogRead(xAxis);
      digitalWrite(ledPin, HIGH);
    }
    client.stop();                // tarminates the connection with the client
  }delay(2000);
}

接收方代码

#include <SPI.h>
#include <ESP8266WiFi.h>

int ENA = D1;
int ENB = D2;
int MotorA1 = D3;
int MotorA2 = D4;
int MotorB1 = D5;
int MotorB2 = D6;
int data[1];

int xAxis;
int yAxis;

int ledPin = D8;
char ssid[] = "*****";           
char pass[] = "*****";           

unsigned long askTimer = 0;

IPAddress server(192,168,1,80);       // the fix IP address of the server
WiFiClient client;

void setup() {
  Serial.begin(115200);               // only for debug
  WiFi.begin(ssid, pass);             // connects to the WiFi router
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
/*  Serial.println("Connected to wifi");
  Serial.print("Status: "); Serial.println(WiFi.status());    // Network parameters
  Serial.print("IP: ");     Serial.println(WiFi.localIP());
  Serial.print("Subnet: "); Serial.println(WiFi.subnetMask());
  Serial.print("Gateway: "); Serial.println(WiFi.gatewayIP());
  Serial.print("SSID: "); Serial.println(WiFi.SSID());
  Serial.print("Signal: "); Serial.println(WiFi.RSSI());*/
  pinMode(ledPin, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(MotorA1, OUTPUT);
  pinMode(MotorA2, OUTPUT);
  pinMode(MotorB1, OUTPUT);
  pinMode(MotorB2, OUTPUT);
  digitalWrite(MotorA1, LOW);
  digitalWrite(MotorA2, LOW);
  digitalWrite(MotorB1, LOW);
  digitalWrite(MotorB2, LOW);
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);
}

void loop () {
  client.connect(server, 80);   // Connection to the server
  digitalWrite(ledPin, LOW);    // to show the communication only (inverted logic)
  Serial.println(".");

   data[xAxis,yAxis] = client.read();   // receives the answer from the sever
  Serial.println(" Received from Server ");
  client.flush();
  digitalWrite(ledPin, HIGH);
  Serial.println(xAxis);
  if(yAxis > 400) {
  digitalWrite(MotorA1, LOW);
  digitalWrite(MotorA2, HIGH);
  digitalWrite(MotorB1, HIGH);
  digitalWrite(MotorB2, LOW);
  analogWrite(ENA, 150);
  analogWrite(ENB, 150);

}else if(yAxis < 320) {
  digitalWrite(MotorA1, HIGH);
  digitalWrite(MotorA2, LOW);
  digitalWrite(MotorB1, LOW);
  digitalWrite(MotorB2, HIGH);
  analogWrite(ENA, 150);
  analogWrite(ENB, 150);
} else if(xAxis < 320){
  digitalWrite(MotorA1, HIGH);
  digitalWrite(MotorA2, LOW);
  digitalWrite(MotorB1, HIGH);
  digitalWrite(MotorB2, LOW);
  analogWrite(ENA, 150);
  analogWrite(ENB, 150);
}else if(xAxis > 400){
  digitalWrite(MotorA1, LOW);
  digitalWrite(MotorA2, HIGH);
  digitalWrite(MotorB1, LOW);
  digitalWrite(MotorB2, HIGH);
  analogWrite(ENA, 150);
  analogWrite(ENB, 150);
}else {
  digitalWrite(MotorA1, LOW);
  digitalWrite(MotorA2, LOW);
  digitalWrite(MotorB1, LOW);
  digitalWrite(MotorB2, LOW);
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);
  }

     delay(2000);              // client will trigger the communication after two seconds
}
serial-port esp8266 arduino-ide nodemcu
1个回答
0
投票

否,int数据[1];有两个值,data [0]和data [1]

© www.soinside.com 2019 - 2024. All rights reserved.