每日一言
成功的路上从不拥挤,因为坚持的人不多,你要做那个例外。
通过单片机发指令给ESP8266进行通信
通信原理(也是接线原理)
代码如下
代码解释一下,因为我们的指令是字符数组(c语言没有字符串的概念),那么我们就要用指针偏移的办法将他们遍历出来了,就是跟我们写的helloworld的方法一样,然后要注意的是,要将双引号加上转义字符\这样双引号才会起到仅仅是符合AT指令格式的作用,不然的话会编译出错的
成功之后会发现我们安信可这边成功以后也就是wife,TCP、数据透传全部都成功了之后,会发现网络调试助手这边也有这样的数据出来了,这个是为什么呢,因为,当我们什么都成功了之后就开启了透传模式,因此我们这些循环的指令,就等于是字符,输出到TCP服务器上,当然我们的ESP8266是没有办法发送数据到TCP服务器上了,因为串口只有RX与ESP8266连接,所以没有用,但是这样我们就可以利用网络来控制LED灯的亮灭了
提一嘴:要是你打开连接单片机的那个串口,看到奥STCISP的串口助手也会显示和TCP服务器一样的数据在刷的时候,是因为在数据向外面发送的时候,只要是串口都会进行发送,都会接受到信息,那为什么不用STCISP的串口助手呢,是因为安信可是专门调试ESP8266的串口助手,执行命令后会返回相应的结果知道是成功还是失败这样方便我们的学习和调试...
TCP通信控制LED
现在我们最先要的就是实现TCP控制LED灯的功能
void main()
{
// int mark=0;
D5 = 1;
Uart1_Init();
while(1){
//if(mark==0){
sendString(LJWL);
Delay1000ms();
Delay1000ms();
Delay1000ms();
Delay1000ms();
sendString(LJFWQ);
Delay1000ms();
Delay1000ms();
Delay1000ms();
Delay1000ms();
sendString(TCMS);
Delay1000ms();
Delay1000ms();
Delay1000ms();
Delay1000ms();
sendString(SJCS);
Delay1000ms();
Delay1000ms();
Delay1000ms();
Delay1000ms();
// mark = 1;
// }else{
// Delay1000ms();
// sendString("helloworld\r\n");
//}
}
}
void UART_handler() interrupt 4
{
//static int i = 0;
if(RI == 1){
RI = 0;
cmd[0] = SBUF;
if(cmd[0]=='1'){
D5 = 0;
}
if(cmd[0]=='0'){
D5 = 1;
}
}
if(TI);
}
直接主要修改的代码都在这边,当我们连接上TCP服务器的时候,通过TCP发送1让LED亮,0让LED暗,但是我真的不想吐槽,连接的成功率真的太低了,而且也不懂什么时候才能连上,干等着,c了.....
因为此时我们的接线是单片机4根线与ESP82664根线相连接的,因为我们想要tcp发送数据到ESP8266,再通过TXD向单片机发送数据,这样单片机才能收到TCP服务器的数据。。。只是想通过网络来控制灯的亮灭。。。但是真的是TMD太难连接上了。。。。无语了,所以有待优化这个代码
就是说,代码理论上都是可行的,但是稳定性真的太勾巴低了,经常连不上,可能1分钟才连得上,太傻逼了
明天我要进行优化,兄弟们