1. ESP8266

ESP8266+LCD1602新玩法

说明:

寒假时候用的那个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的字符串,默认为””。