Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
8 years, 7 months ago.
Not getting UDP connection to work with AT+CIPSTA and AT+CIPSEND
So I am trying to establish UDP connection using AT+CIPSTA_CUR, but whenever I am sending message using AT+CIPSEND, I get "ERROR" and "link is not valid". I am supposed to be sending "Hello" only once but comes up as four times and get "ERROR" and "Link is not valid". For code I am using to establish connection, what would be the best option to get rid of this error ?
-- Prep Socket for Data Send --
AT+CIPSEND=4,20
link is not valid
ERROR AT+CIPSEND=4,20
link is not valid
ERROR AT+CIPSEND=4,20
link is not valid
ERROR
-- Send String --
HelloHelloHelloHello
-- Prep Socket for Data Send --
AT+CIPSEND=4,20
link is not valid
ERROR AT+CIPSEND=4,20
link is not valid
ERROR AT+CIPSEND=4,20
link is not valid
ERROR
-- Send String --
HelloHelloHelloHello
#include "mbed.h"
#include <stdio.h>
#include <string.h>
Serial serial(USBTX, USBRX);
Serial esp(P4_28, P4_29); // tx, rx
DigitalOut reset(P0_4);
DigitalOut blueLed(P2_3);
DigitalOut greenLed(P2_4);
DigitalOut redLed(P2_5);
DigitalOut vibr(P2_12);
Timer t;
int count,ended,timeout;
char buf[4096];
char snd[255];
char sendStr[11];
char ssid[32] = "BTHub6-MPZT"; // enter WiFi router ssid inside the quotes
char pwd [32] = "DPx4PUpvdENF"; // enter WiFi router password inside the quotes
void SendCMD();
void getReply();
int main() {
//Make sure all feedback mechanisms are turned off
blueLed=0;
greenLed=0;
redLed=0;
vibr=0;
//set buad rates for comms
esp.baud(115200);
serial.baud(115200);
// Setup a serial interrupt function to capture received data
esp.attach(&getReply, Serial::RxIrq);
//Device doesn't appear to need a reset upon waking up so the device is not reset (i.e. reset = 1);
reset=1;
// Give the user some to setup the virtual terminal
wait(5);
serial.printf("\n---------- Factory reset device ----------\r\n");
strcpy(snd, "AT+RESTORE\r\n");
timeout=10;
SendCMD();
getReply();
serial.printf(buf);
serial.printf("\n---------- Check status ----------\r\n"); //
strcpy(snd, "AT+GMR\r\n");
timeout=2;
SendCMD();
getReply();
serial.printf(buf);
serial.printf("\n---------- Check status ----------\r\n"); //
strcpy(snd, "AT+CWMODE_CUR=1\r\n");
timeout=2;
SendCMD();
getReply();
serial.printf(buf);
serial.printf("\n---------- List APs in Range ----------\r\n");
strcpy(snd, "AT+CWLAP\r\n");
timeout=10;
SendCMD();
getReply();
serial.printf(buf);
serial.printf("\n---------- Connecting to AP ----------\r\n");
serial.printf("ssid = %s pwd = %s\r\n",ssid,pwd);
strcpy(snd, "AT+CWJAP_CUR=\"");
strcat(snd, ssid);
strcat(snd, "\",\"");
strcat(snd, pwd);
strcat(snd, "\"\r\n");
timeout=15;
SendCMD();
wait(3);
getReply();
serial.printf(buf);
serial.printf("\n---------- Check APIP ----------\r\n"); //Verify that you still have a station IP address
strcpy(snd, "AT+CIPSTA_CUR?\r\n");
timeout=3;
SendCMD();
getReply();
serial.printf(buf);
serial.printf("\n---------- Turn off DHCP for Station----------\r\n"); //
strcpy(snd, "AT+CWDHCP_CUR=1,0\r\n");
timeout=2;
SendCMD();
getReply();
serial.printf(buf); //Prints out response, should be "OK"
serial.printf("\n---------- check DHCP settings----------\r\n"); //
strcpy(snd, "AT+CWDHCP?\r\n");
timeout=2;
SendCMD();
getReply();
serial.printf(buf); //Prints out response, should be "OK"
serial.printf("\n---------- Turn on Multiple Connections ----------\r\n"); //
strcpy(snd, "AT+CIPMUX=1\r\n");
timeout=2;
SendCMD();
getReply();
serial.printf(buf);
/*serial.printf("\n---------- Establishing UDP Connection ----------\r\n");
strcpy(snd, "AT+CIPSTART=4,\"UDP\",\"192.168.1.146\",1234,5678,0\r\n");
SendCMD();
timeout=3;
getReply();
wait(2);
serial.printf(buf);*/
serial.printf("\n---------- Set static Station IP Address ----------\r\n"); //
strcpy(snd, "AT+CIPSTA_CUR=\"192.168.1.146\",\"192.168.1.254\",\"255.255.255.0\"\r\n");
timeout=5;
SendCMD();
getReply();
serial.printf(buf); //Prints out response, should be "OK"
//Check to see that the connection has been established
serial.printf("\n---------- Connection Information ----------\r\n");
strcpy(snd, "AT+CIFSR\r\n"); //get local IP address
timeout=5;
SendCMD();
getReply();
serial.printf(buf);
while(1) {
serial.printf("\n---------- Prep Socket for Data Send ----------\r\n");
strcpy(snd, "AT+CIPSEND=4,20\r\n");
SendCMD();
timeout=1;
getReply();
wait(0.5);
serial.printf(buf);
serial.printf("\n---------- Send String ----------\r\n");
strcpy(snd, "Hello");
serial.printf(snd);
SendCMD();
timeout=3;
getReply();
serial.printf(buf);
}
}
//This function sends the command string to the ESP8266
void SendCMD()
{
esp.printf("%s", snd);
}
//This function establishes the space for the received string, starts a timer so that if things get stuck, the
//app won't hang.
void getReply()
{
memset(buf, '\0', sizeof(buf));
t.start();
ended=0;
count=0;
while(!ended) {
if(esp.readable()) {
buf[count] = esp.getc();
count++;
}
if(t.read() > timeout) {
ended = 1;
t.stop();
t.reset();
}
}
serial.printf(buf);
}