esp8266和atmega328p之间的串行通信

时间:2018-02-10 05:16:14

标签: c++ serial-communication arduino-esp8266

我在esp8266上运行了一个Web服务器。

代码在这里:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WiFiMulti.h> 
#include <ESP8266mDNS.h>
#include <ESP8266WebServer.h>

#include "index.h"
#include "login.h"

ESP8266WiFiMulti wifiMulti;     // Create an instance of the ESP8266WiFiMulti class, called 'wifiMulti'

ESP8266WebServer server(80);    // Create a webserver object that listens for HTTP request on port 80

void handleRoot();              // function prototypes for HTTP handlers
void handleLogin();
void handleNotFound();

void setup(void){
  Serial.begin(115200);         // Start the Serial communication to send messages to the computer
  delay(100);

  wifiMulti.addAP("DIGISOL", "edot2017");   // add Wi-Fi networks you want to connect to
  Serial.println("Connecting ...");
  while (wifiMulti.run() != WL_CONNECTED) { // Wait for the Wi-Fi to connect: scan for Wi-Fi networks, and connect to the strongest of the networks above
    delay(250);
    Serial.print('.');
  }
  Serial.println('\n');
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());               // Tell us what network we're connected to
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP());            // Send the IP address of the ESP8266 to the computer

  server.on("/", HTTP_GET, handleRoot);        // Call the 'handleRoot' function when a client requests URI "/"
  server.on("/login", HTTP_POST, handleLogin); // Call the 'handleLogin' function when a POST request is made to URI "/login"
  server.on("/back",HTTP_POST,handleRoot);
  server.onNotFound(handleNotFound);           // When a client requests an unknown URI (i.e. something other than "/"), call function "handleNotFound"

  server.begin();                            // Actually start the server
  Serial.println("HTTP server started");
}

void loop(void){
  server.handleClient();                     // Listen for HTTP requests from clients
}

void handleRoot() {                          // When URI / is requested, send a web page 
  String indexPage = MAIN_page;
  server.send(200, "text/html",indexPage);
}

void handleLogin() {                         // If a POST request is made to URI /login
  String message = "";        
  if( ! server.hasArg("data") || server.arg("data") == NULL ){ // If the POST request doesn't have username and password data
    server.send(400, "text/plain", "400: Invalid Request");         // The request is invalid, so send HTTP status 400
    return;
  }
  else
  {
      message += server.arg("data");  //Get the name of the parameter
      Serial.println(message);
      String loginpage = LOGIN_PAGE;
      server.send(200, "text/html",loginpage);
  }
}
void handleNotFound(){
  server.send(404, "text/plain", "404: Not found"); // Send HTTP status 404 (Not Found) when there's no handler for the URI in the request
} 

然后我有一个草图,在ledp10显示屏上显示一条正常工作的消息。

ledp10显示消息代码:

#include <SPI.h>
#include <DMD2.h>
#include <fonts/SystemFont5x7.h>
#include <fonts/Arial14.h>
#include <fonts/Droid_Sans_24.h>
#include <fonts/Droid_Sans_16.h>
// Set Width to the number of displays wide you have
const int WIDTH = 1;
const int COUNTDOWN_FROM = 0;
int counter = COUNTDOWN_FROM;
// You can change to a smaller font (two lines) by commenting this line,
// and uncommenting the line after it:
const uint8_t *FONT = SystemFont5x7;
const uint8_t *FONT2 = SystemFont5x7;

const char *MESSAGE = "GOA";

SoftDMD dmd(WIDTH,1);  // DMD controls the entire display
DMD_TextBox box(dmd, 0, 1);
DMD_TextBox box1(dmd,11,1);  // "box" provides a text box to automatically write to/scroll the display

// the setup routine runs once when you press reset:
void setup() {
  Serial.begin(9600);
  dmd.setBrightness(255);
  //dmd.selectFont(FONT);
  dmd.begin();  
}

// the loop routine runs over and over again forever:
void loop() {
  dmd.selectFont(FONT);
  box.print(counter);
  dmd.selectFont(FONT2);
  const char *next = MESSAGE;
 while(*next) {
  Serial.print(*next);
  box1.print(*next);
  delay(500);
  next++;
  }
    box.println(F(""));
    counter++;
    if(counter == 60) {
    dmd.clearScreen();
    counter = 0;
  }
}

现在我需要在esp8266和atmega328p之间进行通信。即,网页上发送的消息需要显示在ledp10显示屏上。 我该怎么办?

请仅在esp8266和atmega328p之间进行串行通信时提供帮助。

1 个答案:

答案 0 :(得分:0)

修改lcd Atmega草图以从串行监视器接收文本。

然后将esp8266连接到Atmega系列,Atmega草图将在esp草图中接收您打印到Serial的文本