ESP8266NodeMCU驱动0,96寸oled+Python+TCP协议通信
(Arduino IDE + PyCharm)
一、ESP8266部分
使用到的头文件
#include <ESP8266WiFi.h> // 引入ESP8266 WiFi库
#include <U8g2lib.h> // 引入U8g2库,用于OLED显示屏
初始化–1部分
const char* ssid = "Leon"; // 要连接的WiFi名称(可以使用手机热点连接测试)
const char* password = "123456"; // WiFi密码
WiFiServer server(12345); // 设置服务器端口
// 初始化OLED显示屏对象
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
初始化–2部分setup()部分
void setup() {//此处的代码只会在上电后运行一次,相当于初始化代码
Serial.begin(115200); // 初始化串口通信,波特率为115200
WiFi.begin(ssid, password); // 连接到WiFi网络
while (WiFi.status() != WL_CONNECTED) { // 等待连接成功
delay(500);
Serial.print("."); // 打印连接进度(会在串口监视器打印“......”)
}
Serial.println("WiFi connected"); // 打印连接成功信息
Serial.println(WiFi.localIP()); // 在串口监视器打印ESP8266的IP地址
server.begin(); // 启动服务器
u8g2.begin(); // 初始化OLED显示屏
}
应用主循环部分
void loop() {//本质上,loop 函数就是一个死循环,Arduino会不断循环执行其中的代码,直到程序停止或用户干预。
WiFiClient client = server.available(); // 检查是否有客户端连接
if (client) {
Serial.println("Client connected"); // 打印客户端连接信息
while (client.connected()) { // 当客户端连接时
if (client.available()) { // 如果客户端有数据可读
String message = client.readStringUntil('\n'); // 读取客户端发送的消息
Serial.println("Received: " + message); // 打印接收到的消息
u8g2.clearBuffer(); // 清空OLED显示屏缓冲区
u8g2.setFont(u8g2_font_ncenB08_tr); // 设置字体
u8g2.drawStr(0, 18, message.c_str()); // 在OLED显示屏上绘制字符串
u8g2.sendBuffer(); // 将缓冲区内容发送到显示屏
client.println("Message received"); // 向客户端发送确认消息
}
}
client.stop(); // 断开客户端连接
Serial.println("Client disconnected"); // 打印客户端断开连接信息
}
}
二、Python部分
import socket # 导入socket库,用于网络通信
def start_client():
host = '192.168.234.26' # 替换为ESP8266的IP地址
port = 12345 # 端口号,需与ESP8266上的端口号一致
# 创建一个TCP/IP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
client_socket.connect((host, port))
try:
while True:
# 从用户输入获取消息
message = input("请输入要发送的消息(输入'exit'退出):")
if message.lower() == 'exit':
break # 如果输入'exit',则退出循环
# 发送消息到服务器
client_socket.sendall((message + '\n').encode())
# 接收服务器的响应
response = client_socket.recv(1024)
print("服务器返回: " + response.decode())
finally:
# 关闭套接字
client_socket.close()
if __name__ == "__main__":
start_client() # 调用函数启动客户端
三、附件
Arduino环境搭建
参考一文速通ESP8266NodeMCU(基于ArduinoIDE)——万字爆肝含示例代码-CSDN博客
这篇博客写的非常非常非常好,胎教级别!!!
Python环境搭建
自己去查,非常非常简单…网上很多教程,这里不再赘述
ESP8266NodeMCU原理图
U8g2库简介+使用教程
U8g2 是一个用于嵌入式设备的单色图形库。U8g2支持单色OLED和LCD,并支持如SSD1306等多种类型的OLED驱动。
U8g2源码的开源库地址:https://github.com/olikraus/u8g2
U8g2专为Arduino提供的方便安装的库地址:https://github.com/olikraus/U8g
U8g2详细使用教程https://zhuanlan.zhihu.com/p/477322369
四、成品展示
引脚连接
python客户端
esp8266客户端
I love you xunn ! --from Leon.