一、代码
#include <ESP8266WiFi.h>
#include <ESP8266WiFi.h>
WiFiClient TCPclient;
#define TCP_SERVER_ADDR "bemfa.com"
#define TCP_SERVER_PORT "8344"
String UID = "c10d9affdff5545b3a6bb80b4fe55d59";
#define MAX_PACKETSIZE 512
#define KEEPALIVEATIME 30*1000
String TcpClient_Buff = "";
unsigned int TcpClient_BuffIndex = 0;
unsigned long TcpClient_preTick = 0;
unsigned long preHeartTick = 0;
unsigned long preTCPStartTick = 0;
bool preTCPConnected = false;
bool subFlag = false;
void doWiFiTick(){
static bool taskStarted = false;
static uint32_t lastWiFiCheckTick = 0;
if ( WiFi.status() != WL_CONNECTED ) {
if (millis() - lastWiFiCheckTick > 1000) {
lastWiFiCheckTick = millis();
}
}
else {
if (taskStarted == false) {
taskStarted = true;
Serial.print("Get IP Address: ");
Serial.println(WiFi.localIP());
startTCPClient();
}
}
}
void doTCPClientTick();
void sendtoTCPServer(String p){
if (!TCPclient.connected())
{
Serial.println("Client is not readly");
return;
}
TCPclient.print(p);
}
void subTopic(String topic){
String tcpTemp="";
tcpTemp = "cmd=1&uid="+UID+"&topic="+topic+"\r\n";
sendtoTCPServer(tcpTemp);
tcpTemp="";
Serial.print("sub topic:");Serial.println(topic);
}
void startTCPClient(){
if(TCPclient.connect(TCP_SERVER_ADDR, atoi(TCP_SERVER_PORT))){
Serial.print("Connected to server:");
Serial.println(TCP_SERVER_ADDR);
subFlag = true;
preHeartTick = millis();
TCPclient.setNoDelay(true);
}
else{
Serial.print("Failed connected to server:");
Serial.println(TCP_SERVER_ADDR);
TCPclient.stop();
preTCPConnected = false;
}
preTCPStartTick = millis();
}
void subTopicCenter(){
if(subFlag == true){
subFlag = false;
subTopic("temp");
}
}
void doTCPClientTick(){
if(WiFi.status() != WL_CONNECTED) return;
if (!TCPclient.connected()) {
if(preTCPConnected == true){
preTCPConnected = false;
preTCPStartTick = millis();
Serial.println();
Serial.println("TCP Client disconnected.");
TCPclient.stop();
}
else if(millis() - preTCPStartTick > 1*1000)
startTCPClient();
}
else
{
if (TCPclient.available()) {
char c =TCPclient.read();
TcpClient_Buff +=c;
TcpClient_BuffIndex++;
TcpClient_preTick = millis();
if(TcpClient_BuffIndex>=MAX_PACKETSIZE - 1){
TcpClient_BuffIndex = MAX_PACKETSIZE-2;
TcpClient_preTick = TcpClient_preTick - 200;
}
preHeartTick = millis();
}
if(millis() - preHeartTick >= KEEPALIVEATIME){
preHeartTick = millis();
Serial.println("--Keep alive:");
sendtoTCPServer("ping\r\n");
}
}
if((TcpClient_Buff.length() >= 1) && (millis() - TcpClient_preTick>=200))
{
TCPclient.flush();
TcpClient_Buff.trim();
String topic = "";
String msg = "";
if(TcpClient_Buff.length() > 15){
int topicIndex = TcpClient_Buff.indexOf("&topic=")+7;
int msgIndex = TcpClient_Buff.indexOf("&msg=");
topic = TcpClient_Buff.substring(topicIndex,msgIndex);
msg = TcpClient_Buff.substring(msgIndex+5);
}
Serial.println(topic);
Serial.println(msg);
msg = "";
topic = "";
TcpClient_Buff="";
TcpClient_BuffIndex = 0;
}
}
void publishMsg(String topic,String msg){
String tcpTemp="";
tcpTemp = "cmd=2&uid="+UID+"&topic="+topic+"&msg="+msg+"\r\n";
sendtoTCPServer(tcpTemp);
tcpTemp="";
Serial.println("A message has been published");
}
void setup(){
WiFi.begin("ESP82666", "12345678");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Local IP:");
Serial.print(WiFi.localIP());
Serial.begin(9600);
}
void loop(){
String comdata;
/******************串口接受数据************************/
while (Serial.available() > 0) // 串口收到字符数大于零。
{
comdata += char(Serial.read());
}
/******************串口打印数据************************/
if(comdata!="")//如果接受到数据
{
comdata="EmployeeID:"+comdata;
publishMsg("temp", comdata);
}
doWiFiTick();
doTCPClientTick();
subTopicCenter();
delay(500);
}
2.使用配置教程
https://cloud.bemfa.com/tcp/index.html
先注册巴法云账号密码,得到了密钥
之后点击新建主题
到这里配置就完成了,之后我们手机或者电脑开启热点;
WIFI名称:ESP82666
WIFI密码:12345678
之后我们修改程序,只需要修改两个地方
1.修改密钥
1.把自己的密钥替换掉
2.把主题名称“temp”换成自己上边自定义的
到这里就全部配置完成了,上传程序即可