Как я могу создать две Soft Access Point на одном устройстве NodeMCU - PullRequest
0 голосов
/ 05 июня 2019

«Я настраиваю два устройства NodeMCu, где один NodeMCU с именем NodeA будет подключаться к маршрутизатору WiFi, а другое устройство NodeMCU с именем NodeB будет связываться с NodeA для отправки значений температуры, полученных с помощью NodeB."

"Чтобы избежать жесткого кодирования учетных данных WiFi, я использовал библиотеку WiFi Manager, чтобы мы могли создать один SSID, который будет отображаться в доступных сетях. Эта библиотека создает SoftAP, который имеет собственный IP-адрес и с помощью которого мы можем настроитьУчетные данные маршрутизатора WiFi. В то же время, устройству NodeB также необходимо обмениваться данными с устройством NodeA, используя тот же IP-адрес SoftAP, я жестко закодировал этот IP-адрес и SSID SoftAP в свой код NodeB, чтобы в момент его включения он началподключиться к NodeA. Но соединение между NodeB и NodeA не происходит. Как решить эту проблему? "

#include <SPI.h>
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>         

// Set web server port number to 80
WiFiServer server(80);

String apiKey_RTD = "AMWCKCGM6MCUTHW2",apiKey_RFTD = "XN4BVE0THAI6J2M9",apiKey_HLB = "VMJ4R2XQ8ZA43KSB";     //  Enter your Write API key from ThingSpeak


const char *ssidAP = "myNodeMCU"; // The name of the Wi-Fi network that will be created
const char *passwordAP = "connectme";   // The password required to connect to it, leave blank for an open network
int channel=2,max_connection=4;
boolean hidden=false;


// Variable to store the HTTP request
//String header;

byte ledPin = 16,lock=0,showonce=1,dispRTD1=0,dispRTD2=0,dispHLB=0;
String request,request1,mybigdata,myRTD1values,myRTD2values,myHLBvalues,mytemp1,myhumi1,mytemp2,myfaht2,mylightvalue,mylightstatus,lightoffvalue,lightonvalue;


void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN,OUTPUT);

  WiFi.softAP(ssidAP, passwordAP, channel, hidden, max_connection);            // Start the access point


  WiFiManager wifiManager; 

  // Uncomment and run it once, if you want to erase all the stored information
  //  wifiManager.resetSettings();

  // void setAPStaticIPConfig(IPAddress IP, IPAddress gateway, IPAddress Subnet);
    wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0));

   boolean portal=wifiManager.autoConnect("StorM3","password9"); //start another access point with 10.0.1.1 to configure WiFi credentials
  // or use this for auto generated name ESP + ChipID
   //boolean portal=wifiManager.autoConnect();

  // if you get here you have connected to the WiFi
  if(portal)
    {
     Serial.println("Connected.");
    }

  server.begin();

  Serial.print("Access Point \"");
  Serial.print(ssidAP);
  Serial.println("\" started");

  Serial.print("IP address:\t");
  Serial.println(WiFi.softAPIP());


  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);
  delay(2000);
}



void loop(){
 WiFiClient client = server.available();

  if (client) 
  {
    if (client.connected()) 
    {
//        Serial.printf("Stations connected = %d\n", WiFi.softAPgetStationNum());
//        delay(1000);
        Serial.println("Client connected");
        digitalWrite(ledPin, LOW);    // to show the communication only (inverted logic)
        Serial.println(".");

 //***************************Temperature receive code added from here*******************************//

        request = client.readStringUntil('\r');    // receives the message from the client
        //Serial.println(request);
        mybigdata = request;

        if(request.substring(3,4)=="1")
        {
          myRTD1values = request;
        }

        Serial.print("RTD1 Temperature = ");
        Serial.println(myRTD1values);

    //****************************DATA FROM RTD1 WILL BE PROCESSED HERE*********************************//
        if(mybigdata.substring(3,4)=="1")
        {  
         dispRTD1=1;
         mytemp1=myRTD1values.substring(4,8);
         //Serial.print("Temperature data from RTD: "); 
         //Serial.println(mytemp1);

         myhumi1=myRTD1values.substring(8,12);
         //Serial.print("Humidity data from RTD: "); 
         //Serial.println(myhumi1);

         client.flush();
         client.println("Hi RTD1!I received your data.\r");//String length 28
         digitalWrite(ledPin, HIGH); 
       }   
      }  
     client.stop();                // tarminates the connection with the client

     if(dispRTD1)
      {
        //Serial.println("Master disconnected from RTD but RTD is still in connection");
       }

     showonce=0;
  }


  else
   { 
    if(showonce==1)
      {
        if(dispRTD1)
         {Serial.println("\n!!!!!RTD not connected!!!!!\n");}     
        showonce=0;
      }
   }

}
...