【ESP8266-NodeMCU裸机开发------连接云平台】使用ESP8266-NodeMCU连接新大陆云平台_nlecloud

#define Dht 12 //GPIO12–D6
//新大陆服务器地址
#define TCP_server_ADDR1 “ndp.nlecloud.com”
#define TCP_server_ADDR2 “117.78.1.201”
//新大陆TCP连接端口
#define TCP_server_port1 “8600”
#define TCP_server_port2 “8700”
#define TCP_server_port3 “8800”
//连接自己的WiFi的名字和地址
#define WiFi_SSID “wulianwang”
#define WiFi_PASSWORD “wulianwang”
//设置上传数据的速率(1s<=upspeed<=60s)
#define upspeed 21000
//设置最大字节个数
#define MAX_PACKETSIZE 512
//设置心跳值 15s
#define KEEP_liveTime 15
1000
//设置重连时长
#define Reconnect_Time 2*1000

WiFiClient TCPclient; //以WiFi为媒创建一个TCPclien的对象
bool preTCPconnect=false; //TCP连接标志
unsigned long long preHeartTick = 0; //心跳连接
unsigned long preTCPStartTick = 0; //客户端连接
String TcpClient_Buff = “”; //存储收的数据
unsigned int TcpClient_BuffIndex = 0; //增加指数
unsigned long TcpClient_preTick = 0;

DHT dht(Dht,DHT11); //选择采集引脚和DHT的型号
int temp=0; //存温度数据
int hum=0; //存湿度数据
char cmd=0; //存每次收数据

void yin_init() //初始化引脚
{
pinMode(RED_LED,OUTPUT);
pinMode(GREEN_LED,OUTPUT);
pinMode(Dht,INPUT);
}

void cai_dht() //采温湿度
{
dht.begin(); //dht初始化
}

void serial_port() //串口
{
Serial.begin(9600);
}

void start_wifi_connect() //WiFi设置
{
WiFi.disconnect();
//1.STA模式:该模块通过路由器连接网络,手机或者电脑实现该设备的远程控制。
//2.AP模式:该模块作为热点,手机或者电脑连接wifi与该模块通信,实现局域网的无线控制。
//3.STA+AP模式:两种模式共存,既可以通过路由器连接到互联网,也可以作为WiFi热点,使其他设备连接到这个模块,实现广域网与局域网的无缝切换。
WiFi.mode(WIFI_STA);
WiFi.begin(WiFi_SSID,WiFi_PASSWORD);
}

void wifi_tick() //开始连接WiFi
{
static bool StartSTAFlag=false; //检查是否需要初始化WiFi
static bool TaskStart=false; //检查是否连接成功
int time=1; //连接的时长

if(!StartSTAFlag)
{
StartSTAFlag=true;
start_wifi_connect();
Serial.printf(“\n堆大小:%d\r\n”,ESP.getFreeHeap());
}

//等待WiFi连接
Serial.print(“开始连接WiFi:”);
while(WiFi.status()!=WL_CONNECTED)
{
Serial.print(time++);
Serial.print(“秒”);
Serial.print(’ ');
delay(1000);
}

//WiFi连接成功后
if(TaskStart==false)
{
TaskStart=true;
Serial.print(“\r\nESP8266本机IP地址:”);
Serial.println(WiFi.localIP());
start_TCP_connect();
}
}

void sendto_TCPserver(String cmd) //发送数据到TCP服务器
{
if(TCPclient.connected())
{
TCPclient.print(cmd);
Serial.print(“发送到TCP服务器的字符串:”);
Serial.println(cmd);
}
else
{
Serial.println(“客户端未读取”);
return ;
}
}

void start_TCP_connect() //开始连接服务器
{
if(TCPclient.connect(TCP_server_ADDR1,atoi(TCP_server_port1))) //尝试连接服务器,成功返回1,失败返回0
{
Serial.print(“连接成功,服务器和端口号:”);
Serial.printf(“%s:%d\n”,TCP_server_ADDR1,atoi(TCP_server_port1));
//用于存储构建的JSON报文,以DynamicJsonDocument方式声明的对象将存储在堆内存中
DynamicJsonDocument doc(2*1024);
//构建一个JSON_Value字符串存储没有反序化之前的报文
String JSON_Value = “{“t”:“1”,“device”:“zhubaoli”,“Key”:“578fd5fdd1c448dc8494c587e012fcba”,“ver”:“v1.1”}”;
//反序化JSON_Value字符串为JSON报文格式,存入doc中
deserializeJson(doc,JSON_Value);
sendto_TCPserver(JSON_Value);
preTCPconnect=true;
preHeartTick = millis();
TCPclient.setNoDelay(true);
}
else
{
TCPclient.stop();
preTCPconnect=false;
Serial.print(“连接服务器失败:”);
Serial.print(TCP_server_ADDR1); //打印服务器的地址

}
preTCPStartTick=millis();
}

void cai_DHT11() 采集数据并上传
{
if(millis()-preHeartTick>=upspeed)
{
preHeartTick=millis();
DynamicJsonDocument doc(1024);
//构建input字符串
String input = “{“t”:“3”,“datatype”:1,“datas”:{“Temperature”:temp,“Humidity”:hum}}”;
//转换json字符串转成json格式报文,先反序字符串得出json报文
deserializeJson(doc,input);
Serial.print(“发送到TCP客户端的数据:”);
Serial.println(input);
//获取将JSON字符串经过显示类型转换为JSON对象的报文主体
JsonObject obj = doc.as();

//解析元素,再将温湿度数据存入对应的元素
temp=dht.readTemperature();
hum=dht.readHumidity();
obj["datas"]["Temperature"]=temp;
obj["datas"]["Humidity"]=hum;
String output;    //存发更新温湿度的数据
//序列化新的数据
serializeJson(doc,output);
sendto_TCPserver(output);   //发送给云平台

}
}

void State_TCPClient_Tick() //检查数据,发送心跳
{
if(WiFi.status()!=WL_CONNECTED) //检查wifi是否断开,断开后重连
return ;
if(TCPclient.connected()) //没有断开连接
{
if(TCPclient.available()) //收数据
{
cmd=TCPclient.read(); //客户端读取服务端的数据
TcpClient_Buff=TcpClient_Buff+cmd;
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>=KEEP_liveTime) //检查心跳连接
{

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值