Smart parking system using ESP-8266 Wi-Fi module with infrared sensor and servo motor

Dependencies:   Servo mbed-os FXOS8700Q

Committer:
sahilkasana
Date:
Wed Apr 29 00:17:28 2020 +0000
Revision:
0:b2db5e8bd926
smart parking system using ESP-8266 Wi-Fi module with Thingspeak.; Infrared sensors are used in the project along with servo motor.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sahilkasana 0:b2db5e8bd926 1 #include "ESP8266.h"
sahilkasana 0:b2db5e8bd926 2 #define HTTPCMD "GET "
sahilkasana 0:b2db5e8bd926 3 #define protocol " HTTP/1.0\n\n"
sahilkasana 0:b2db5e8bd926 4
sahilkasana 0:b2db5e8bd926 5
sahilkasana 0:b2db5e8bd926 6 // Constructor
sahilkasana 0:b2db5e8bd926 7 ESP8266::ESP8266(PinName tx, PinName rx, int br) : comm(tx, rx) {
sahilkasana 0:b2db5e8bd926 8 comm.baud(br);
sahilkasana 0:b2db5e8bd926 9 }
sahilkasana 0:b2db5e8bd926 10
sahilkasana 0:b2db5e8bd926 11 // Destructor
sahilkasana 0:b2db5e8bd926 12 ESP8266::~ESP8266() { }
sahilkasana 0:b2db5e8bd926 13
sahilkasana 0:b2db5e8bd926 14 // Add <CR> + <LF> at the end of the string
sahilkasana 0:b2db5e8bd926 15 void ESP8266::AddEOL(char * s) {
sahilkasana 0:b2db5e8bd926 16 char k;
sahilkasana 0:b2db5e8bd926 17 k = strlen(s); // Finds position of NULL character
sahilkasana 0:b2db5e8bd926 18 s[k] = 0x0D; // switch NULL for <CR>
sahilkasana 0:b2db5e8bd926 19 s[k + 1] = 0x0A; // Add <LF>
sahilkasana 0:b2db5e8bd926 20 s[k + 2] = 0; // Add NULL at the end
sahilkasana 0:b2db5e8bd926 21 }
sahilkasana 0:b2db5e8bd926 22
sahilkasana 0:b2db5e8bd926 23 // Add one ASCII character at the end of the string
sahilkasana 0:b2db5e8bd926 24 void ESP8266::AddChar(char * s, char c) {
sahilkasana 0:b2db5e8bd926 25 char k;
sahilkasana 0:b2db5e8bd926 26 k = strlen(s);
sahilkasana 0:b2db5e8bd926 27 s[k] = c;
sahilkasana 0:b2db5e8bd926 28 s[k + 1] = 0;
sahilkasana 0:b2db5e8bd926 29 }
sahilkasana 0:b2db5e8bd926 30
sahilkasana 0:b2db5e8bd926 31 // Converts integer number to null-terminated string
sahilkasana 0:b2db5e8bd926 32 void ESP8266::itoa(int n, char * s) {
sahilkasana 0:b2db5e8bd926 33 char k = 0;
sahilkasana 0:b2db5e8bd926 34 char r[11];
sahilkasana 0:b2db5e8bd926 35
sahilkasana 0:b2db5e8bd926 36 if(n == 0) {
sahilkasana 0:b2db5e8bd926 37 s[0] = '0';
sahilkasana 0:b2db5e8bd926 38 s[1] = 0;
sahilkasana 0:b2db5e8bd926 39 } else {
sahilkasana 0:b2db5e8bd926 40 while(n != 0) {
sahilkasana 0:b2db5e8bd926 41 r[k]= (n % 10) + '0';
sahilkasana 0:b2db5e8bd926 42 n = n / 10;
sahilkasana 0:b2db5e8bd926 43 k++;
sahilkasana 0:b2db5e8bd926 44 }
sahilkasana 0:b2db5e8bd926 45 while(k > 0) {
sahilkasana 0:b2db5e8bd926 46 s[n] = r[k - 1] + '0';
sahilkasana 0:b2db5e8bd926 47 n++;
sahilkasana 0:b2db5e8bd926 48 k--;
sahilkasana 0:b2db5e8bd926 49 }
sahilkasana 0:b2db5e8bd926 50 s[n] = 0;
sahilkasana 0:b2db5e8bd926 51 }
sahilkasana 0:b2db5e8bd926 52 }
sahilkasana 0:b2db5e8bd926 53
sahilkasana 0:b2db5e8bd926 54 // Sends command to ESP8266. Receives the command string
sahilkasana 0:b2db5e8bd926 55 void ESP8266::SendCMD(char * s) {
sahilkasana 0:b2db5e8bd926 56 AddEOL(s);
sahilkasana 0:b2db5e8bd926 57 comm.printf("%s", s);
sahilkasana 0:b2db5e8bd926 58 }
sahilkasana 0:b2db5e8bd926 59
sahilkasana 0:b2db5e8bd926 60 // Resets the ESP8266
sahilkasana 0:b2db5e8bd926 61 void ESP8266::Reset(void) {
sahilkasana 0:b2db5e8bd926 62 char rs[10];
sahilkasana 0:b2db5e8bd926 63 strcpy(rs, "AT+RST");
sahilkasana 0:b2db5e8bd926 64 SendCMD(rs);
sahilkasana 0:b2db5e8bd926 65 }
sahilkasana 0:b2db5e8bd926 66
sahilkasana 0:b2db5e8bd926 67 // Receive reply until no character is received after a given timeout in miliseconds
sahilkasana 0:b2db5e8bd926 68 bool ESP8266::RcvReply(char * r, int to) {
sahilkasana 0:b2db5e8bd926 69 Timer t;
sahilkasana 0:b2db5e8bd926 70 bool ended = 0;
sahilkasana 0:b2db5e8bd926 71 char c;
sahilkasana 0:b2db5e8bd926 72
sahilkasana 0:b2db5e8bd926 73 strcpy(r, "");
sahilkasana 0:b2db5e8bd926 74 t.start();
sahilkasana 0:b2db5e8bd926 75 while(!ended) {
sahilkasana 0:b2db5e8bd926 76 if(comm.readable()) {
sahilkasana 0:b2db5e8bd926 77 c = comm.getc();
sahilkasana 0:b2db5e8bd926 78 AddChar(r, c);
sahilkasana 0:b2db5e8bd926 79 t.start();
sahilkasana 0:b2db5e8bd926 80 }
sahilkasana 0:b2db5e8bd926 81 if(t.read_ms() > to) {
sahilkasana 0:b2db5e8bd926 82 ended = 1;
sahilkasana 0:b2db5e8bd926 83 }
sahilkasana 0:b2db5e8bd926 84 }
sahilkasana 0:b2db5e8bd926 85 AddChar(r, 0x00);
sahilkasana 0:b2db5e8bd926 86 return ended;
sahilkasana 0:b2db5e8bd926 87 }
sahilkasana 0:b2db5e8bd926 88
sahilkasana 0:b2db5e8bd926 89 // Gets the AP list. Parameter: the string to receive the list
sahilkasana 0:b2db5e8bd926 90 void ESP8266::GetList(char * l) {
sahilkasana 0:b2db5e8bd926 91 char rs[15];
sahilkasana 0:b2db5e8bd926 92 strcpy(rs, "AT+CWLAP");
sahilkasana 0:b2db5e8bd926 93 SendCMD(rs);
sahilkasana 0:b2db5e8bd926 94 RcvReply(l, 5000); // Needs big timeout because it takes long to start replying
sahilkasana 0:b2db5e8bd926 95 }
sahilkasana 0:b2db5e8bd926 96
sahilkasana 0:b2db5e8bd926 97 // Joins a Wifi AP. Parameters: SSID and Password (strings)
sahilkasana 0:b2db5e8bd926 98 void ESP8266::Join(char * id, char * pwd) {
sahilkasana 0:b2db5e8bd926 99 char cmd[255];
sahilkasana 0:b2db5e8bd926 100 strcpy(cmd, "AT+CWJAP=");
sahilkasana 0:b2db5e8bd926 101 AddChar(cmd, 0x22);
sahilkasana 0:b2db5e8bd926 102 strcat(cmd, id);
sahilkasana 0:b2db5e8bd926 103 AddChar(cmd, 0x22);
sahilkasana 0:b2db5e8bd926 104 AddChar(cmd, 0x2C);
sahilkasana 0:b2db5e8bd926 105 AddChar(cmd, 0x22);
sahilkasana 0:b2db5e8bd926 106 strcat(cmd, pwd);
sahilkasana 0:b2db5e8bd926 107 AddChar(cmd, 0x22);
sahilkasana 0:b2db5e8bd926 108 SendCMD(cmd);
sahilkasana 0:b2db5e8bd926 109 }
sahilkasana 0:b2db5e8bd926 110
sahilkasana 0:b2db5e8bd926 111 // Gets ESP IP. Parameter: string to contain IP
sahilkasana 0:b2db5e8bd926 112 void ESP8266::GetIP(char * ip) {
sahilkasana 0:b2db5e8bd926 113 char cmd[15];
sahilkasana 0:b2db5e8bd926 114 strcpy(cmd, "AT+CIFSR");
sahilkasana 0:b2db5e8bd926 115 SendCMD(cmd);
sahilkasana 0:b2db5e8bd926 116 RcvReply(ip, 2000);
sahilkasana 0:b2db5e8bd926 117 }
sahilkasana 0:b2db5e8bd926 118
sahilkasana 0:b2db5e8bd926 119 //Defines wifi mode; Parameter: mode; 1= STA, 2= AP, 3=both
sahilkasana 0:b2db5e8bd926 120 void ESP8266::SetMode(char mode) {
sahilkasana 0:b2db5e8bd926 121 char cmd[15];
sahilkasana 0:b2db5e8bd926 122 strcpy(cmd, "AT+CWMODE=");
sahilkasana 0:b2db5e8bd926 123 mode = mode + 0x30; // Converts number into corresponding ASCII character
sahilkasana 0:b2db5e8bd926 124 AddChar(cmd, mode); // Completes command string
sahilkasana 0:b2db5e8bd926 125 SendCMD(cmd);
sahilkasana 0:b2db5e8bd926 126 }
sahilkasana 0:b2db5e8bd926 127
sahilkasana 0:b2db5e8bd926 128 // Quits the AP
sahilkasana 0:b2db5e8bd926 129 void ESP8266::Quit(void) {
sahilkasana 0:b2db5e8bd926 130 char cmd[15];
sahilkasana 0:b2db5e8bd926 131 strcpy(cmd, "AT+CWQAP");
sahilkasana 0:b2db5e8bd926 132 SendCMD(cmd);
sahilkasana 0:b2db5e8bd926 133 }
sahilkasana 0:b2db5e8bd926 134
sahilkasana 0:b2db5e8bd926 135 // Sets single connection
sahilkasana 0:b2db5e8bd926 136 void ESP8266::SetSingle(void) {
sahilkasana 0:b2db5e8bd926 137 char cmd[15];
sahilkasana 0:b2db5e8bd926 138 strcpy(cmd, "AT+CIPMUX=0");
sahilkasana 0:b2db5e8bd926 139 SendCMD(cmd);
sahilkasana 0:b2db5e8bd926 140 }
sahilkasana 0:b2db5e8bd926 141
sahilkasana 0:b2db5e8bd926 142 // Sets multiple connection
sahilkasana 0:b2db5e8bd926 143 void ESP8266::SetMultiple(void) {
sahilkasana 0:b2db5e8bd926 144 char rs[15];
sahilkasana 0:b2db5e8bd926 145 strcpy(rs, "AT+CIPMUX=1");
sahilkasana 0:b2db5e8bd926 146 SendCMD(rs);
sahilkasana 0:b2db5e8bd926 147 }
sahilkasana 0:b2db5e8bd926 148
sahilkasana 0:b2db5e8bd926 149 // Gets connection status. Parameter: string to contain status
sahilkasana 0:b2db5e8bd926 150 void ESP8266::GetConnStatus(char * st) {
sahilkasana 0:b2db5e8bd926 151 char cmd[15];
sahilkasana 0:b2db5e8bd926 152 strcpy(cmd, "AT+CIPSTATUS");
sahilkasana 0:b2db5e8bd926 153 SendCMD(cmd);
sahilkasana 0:b2db5e8bd926 154 RcvReply(st, 2000);
sahilkasana 0:b2db5e8bd926 155 }
sahilkasana 0:b2db5e8bd926 156
sahilkasana 0:b2db5e8bd926 157 // Starts server mode. Parameter: port to be used
sahilkasana 0:b2db5e8bd926 158 void ESP8266::StartServerMode(int port) {
sahilkasana 0:b2db5e8bd926 159 char rs[25];
sahilkasana 0:b2db5e8bd926 160 char t[4];
sahilkasana 0:b2db5e8bd926 161 strcpy(rs, "AT+CIPSERVER=1,");
sahilkasana 0:b2db5e8bd926 162 itoa(port, t);
sahilkasana 0:b2db5e8bd926 163 strcat(rs, t);
sahilkasana 0:b2db5e8bd926 164 SendCMD(rs);
sahilkasana 0:b2db5e8bd926 165 }
sahilkasana 0:b2db5e8bd926 166
sahilkasana 0:b2db5e8bd926 167 // Close server mode.
sahilkasana 0:b2db5e8bd926 168 void ESP8266::CloseServerMode(void) {
sahilkasana 0:b2db5e8bd926 169 char rs[20];
sahilkasana 0:b2db5e8bd926 170 strcpy(rs, "AT+CIPSERVER=0");
sahilkasana 0:b2db5e8bd926 171 SendCMD(rs);
sahilkasana 0:b2db5e8bd926 172 }
sahilkasana 0:b2db5e8bd926 173
sahilkasana 0:b2db5e8bd926 174 void ESP8266::setTransparent(void){
sahilkasana 0:b2db5e8bd926 175 char rs[20];
sahilkasana 0:b2db5e8bd926 176 strcpy(rs, "AT+CIPMODE=0");
sahilkasana 0:b2db5e8bd926 177 SendCMD(rs);
sahilkasana 0:b2db5e8bd926 178 }
sahilkasana 0:b2db5e8bd926 179
sahilkasana 0:b2db5e8bd926 180 void ESP8266::startTCPConn(char *IP, int port){
sahilkasana 0:b2db5e8bd926 181 char rs[100];
sahilkasana 0:b2db5e8bd926 182 sprintf(rs, "AT+CIPSTART=\"TCP\",\"%s\",%d", IP, port);
sahilkasana 0:b2db5e8bd926 183 SendCMD(rs);
sahilkasana 0:b2db5e8bd926 184 }
sahilkasana 0:b2db5e8bd926 185
sahilkasana 0:b2db5e8bd926 186 void ESP8266::sendURL(char *URL, char *command){
sahilkasana 0:b2db5e8bd926 187 char url[300], snd[300], http_cmd[300];
sahilkasana 0:b2db5e8bd926 188
sahilkasana 0:b2db5e8bd926 189 strcpy(http_cmd, HTTPCMD);
sahilkasana 0:b2db5e8bd926 190
sahilkasana 0:b2db5e8bd926 191 strcat(http_cmd, URL);
sahilkasana 0:b2db5e8bd926 192 strcat(http_cmd, protocol);
sahilkasana 0:b2db5e8bd926 193
sahilkasana 0:b2db5e8bd926 194 strcpy(url, http_cmd);
sahilkasana 0:b2db5e8bd926 195 sprintf(snd,"AT+CIPSENDEX=%d",strlen(url));
sahilkasana 0:b2db5e8bd926 196 strcpy(command, url);
sahilkasana 0:b2db5e8bd926 197 SendCMD(snd);
sahilkasana 0:b2db5e8bd926 198 wait(3);
sahilkasana 0:b2db5e8bd926 199 SendCMD(url);
sahilkasana 0:b2db5e8bd926 200 }
sahilkasana 0:b2db5e8bd926 201
sahilkasana 0:b2db5e8bd926 202