说明:
寒假时候用的那个ESP8266和LCD1602配合工作时老是不能加电自启现在终于找到原因了就是寒假的那个ESP8266体质问题,现在我手上的ESP8266就没有出现这种问题!
写在前面:
本次测试主要是使用ESP8266连接到局域网然后创建一个Web Server ;这样内网的设备通过这个Server与ESP8266通信,从而实现通过内网设备控制LCD1602的显示内容。这就是“无线显示器”啊,蛤蛤蛤!
电路图:
画图累的一批,不过这个小软件(fritzing)还是挺好用的(但是好像不更新了哎)
代码:
改写自esp8266 for arduino 提供的HelloServer.ino
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <LiquidCrystal.h>
#ifndef STASSID
#define STASSID "SENCOM_M6 Note"//你的wifi 名称
#define STAPSK "qwertyuiop"//你的wifi 密码
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
ESP8266WebServer server(80);
const int rs = 16, en = 5, d4 = 4, d5 = 0, d6 = 14, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//处理 http://ip
void handleRoot()
{
server.send(200, "text/plain", "hello from esp8266!");
}
//处理 http://ip/lcd1602
void handleLCD()
{
int pos_x = 0,pos_y = 0,isclear;
String message = "";
for (uint8_t i = 0; i < server.args(); i++)
{
if(server.argName(i) == "pos_x")
{
pos_x = atoi(server.arg(i).c_str());
}
if(server.argName(i) == "pos_y")
{
pos_y = atoi(server.arg(i).c_str());
}
if(server.argName(i) == "message")
{
message = server.arg(i);
}
if(server.argName(i) == "isclear")
{
isclear = atoi(server.arg(i).c_str());
}
if(isclear == 1)
{
lcd.clear();
}
lcd.setCursor(pos_x,pos_y);
lcd.print(message);
}
server.send(200, "text/plain", message);
}
//处理 NotFound
void handleNotFound()
{
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++)
{
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
}
void setup(void)
{
lcd.begin(16, 2);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
lcd.print("Conn to SENCOM");
lcd.setCursor(0, 1);
// Wait for connection
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
lcd.print(".");
}
lcd.clear();
lcd.print("Server on:");
lcd.setCursor(0, 1);
lcd.print(WiFi.localIP());
if (MDNS.begin("esp8266"))
{
Serial.println("MDNS responder started");
}
server.on("/", handleRoot);
server.on("/lcd1602", handleLCD);
server.onNotFound(handleNotFound);
server.begin();
}
void loop(void)
{
server.handleClient();
MDNS.update();
}
正确打开方式:
1.用数据线将esp8266 连接至计算机
2.打开arduino ide 将程序下载到esp8266中(注意代码中的WIFI名称和密码需要改成正确的)
此时可以发现我的Server 跑在192.168.43.166上,我们可以打开浏览器测试一下
嗯,没有问题!
试一下打印Hello World?
直接在浏览器地址栏输入以下内容:
http://192.168.43.166/lcd1602?pos_x=0&pos_y=0&message=Hello%20World!&isclear=1
效果图如下:
参数说明:
pos_x :以左上角为坐标原点,指定字符打印的横坐标,默认为0。
pos_y :以左上角为坐标原点,指定字符打印的纵坐标,默认为0。
isclear:此为清屏标志位,默认为0
message :此为发送到LCD1602的字符串,默认为””。