The final project of Embedde class.

Dependencies:   C12832 LM75B ESP-call MMA7660

Committer:
pkr7098
Date:
Thu Jun 03 07:09:55 2021 +0000
Revision:
2:37756b51ccdb
Parent:
1:ed1c6618f739
The final project of Embedde class.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pkr7098 1:ed1c6618f739 1 #include "WIFI.h"
pkr7098 1:ed1c6618f739 2
pkr7098 1:ed1c6618f739 3 char wifiIpAddress[16] = {0,};
pkr7098 1:ed1c6618f739 4 char wifiSSID[1025] = "fig";
pkr7098 1:ed1c6618f739 5 char wifiSSIDPassword[1025] = "10281028";
pkr7098 1:ed1c6618f739 6 volatile char wifiReceivedBuffer[2049] = {0};
pkr7098 1:ed1c6618f739 7 volatile int wifiReceivedBufferIndex = 0;
pkr7098 1:ed1c6618f739 8
pkr7098 1:ed1c6618f739 9 Semaphore semaphoreWifiHasBuffer(0, 1);
pkr7098 1:ed1c6618f739 10
pkr7098 1:ed1c6618f739 11 void wifiInit(void)
pkr7098 1:ed1c6618f739 12 {
pkr7098 1:ed1c6618f739 13 PC.baud(115200);
pkr7098 1:ed1c6618f739 14 ESP.baud(115200);
pkr7098 1:ed1c6618f739 15 PC.printf("\r\nReset ESP...\r\n");
pkr7098 1:ed1c6618f739 16 ESP_reset();
pkr7098 1:ed1c6618f739 17 PC.printf("Setup ESP noecho...\r\n");
pkr7098 1:ed1c6618f739 18 ESP_noecho();
pkr7098 1:ed1c6618f739 19 }
pkr7098 1:ed1c6618f739 20
pkr7098 1:ed1c6618f739 21 void wifiConnectToAP(void)
pkr7098 1:ed1c6618f739 22 {
pkr7098 1:ed1c6618f739 23 char wifiSSIDInstruction[1042];
pkr7098 1:ed1c6618f739 24 char wifiSSIDPasswordInstruction[1041];
pkr7098 1:ed1c6618f739 25
pkr7098 1:ed1c6618f739 26 PC.printf("\r\nTry to connect to %s wifi!!\r\n", wifiSSID);
pkr7098 1:ed1c6618f739 27
pkr7098 1:ed1c6618f739 28 sprintf(wifiSSIDInstruction, "station_cfg.ssid=\"%s\"", wifiSSID);
pkr7098 1:ed1c6618f739 29 sprintf(wifiSSIDPasswordInstruction, "station_cfg.pwd=\"%s\"", wifiSSIDPassword);
pkr7098 1:ed1c6618f739 30
pkr7098 1:ed1c6618f739 31 NodeMCU_PGM wifiConnect[] = {
pkr7098 1:ed1c6618f739 32 "", 1,
pkr7098 1:ed1c6618f739 33 "wifi.setmode(wifi.STATION)", 1,
pkr7098 1:ed1c6618f739 34 "", 1,
pkr7098 1:ed1c6618f739 35 "station_cfg={}", 1,
pkr7098 1:ed1c6618f739 36 wifiSSIDInstruction, 1,
pkr7098 1:ed1c6618f739 37 wifiSSIDPasswordInstruction, 1,
pkr7098 1:ed1c6618f739 38 "station_cfg.save=false", 1, //false
pkr7098 1:ed1c6618f739 39 "wifi.sta.config(station_cfg)", 1,
pkr7098 1:ed1c6618f739 40 "", 1,
pkr7098 1:ed1c6618f739 41 "wifi.sta.connect()", 80, // long delay here!
pkr7098 1:ed1c6618f739 42 NULL, 0,
pkr7098 1:ed1c6618f739 43 };
pkr7098 1:ed1c6618f739 44
pkr7098 1:ed1c6618f739 45 ESP_call_multi(wifiConnect);
pkr7098 1:ed1c6618f739 46 }
pkr7098 1:ed1c6618f739 47
pkr7098 1:ed1c6618f739 48 char* wifiGetIpAddress(void)
pkr7098 1:ed1c6618f739 49 {
pkr7098 1:ed1c6618f739 50 NodeMCU_PGM wifiGetIpAddress[] = {
pkr7098 1:ed1c6618f739 51 "", 1,
pkr7098 1:ed1c6618f739 52 "print(wifi.sta.getip())", 1,
pkr7098 1:ed1c6618f739 53 NULL, 0,
pkr7098 1:ed1c6618f739 54 };
pkr7098 1:ed1c6618f739 55
pkr7098 1:ed1c6618f739 56 ESP_call_multi(wifiGetIpAddress);
pkr7098 1:ed1c6618f739 57
pkr7098 1:ed1c6618f739 58 char *pIp[2] = {ESP_recv_buffer, 0};
pkr7098 1:ed1c6618f739 59
pkr7098 1:ed1c6618f739 60 /*
pkr7098 1:ed1c6618f739 61 ESP_recv_buffer 안에 저장된 xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy zzz.zzz.zzz중 xxx.xxx.xxx.xxx IP를 얻기 위해
pkr7098 1:ed1c6618f739 62 xxx.xxx.xxx.xxx가 시작하는 문자열 상의 주소와 끝나는 주소 값이 저장됩니다.
pkr7098 1:ed1c6618f739 63 즉 \t가 나올 때까지 검사합니다.
pkr7098 1:ed1c6618f739 64 */
pkr7098 1:ed1c6618f739 65
pkr7098 1:ed1c6618f739 66 pIp[1] = strchr(pIp[0] + 1, '\t');
pkr7098 1:ed1c6618f739 67
pkr7098 1:ed1c6618f739 68 int ipLength = pIp[1] - pIp[0];
pkr7098 1:ed1c6618f739 69
pkr7098 1:ed1c6618f739 70 for(int i = 0; i < ipLength; i++) {
pkr7098 1:ed1c6618f739 71 wifiIpAddress[i] = *(pIp[0] + i);
pkr7098 1:ed1c6618f739 72 }
pkr7098 1:ed1c6618f739 73
pkr7098 1:ed1c6618f739 74 PC.printf("\r\nYour IP: %s\r\n", wifiIpAddress);
pkr7098 1:ed1c6618f739 75
pkr7098 1:ed1c6618f739 76 return wifiIpAddress;
pkr7098 1:ed1c6618f739 77 }
pkr7098 1:ed1c6618f739 78
pkr7098 1:ed1c6618f739 79 void wifiInitServer(void)
pkr7098 1:ed1c6618f739 80 {
pkr7098 1:ed1c6618f739 81 NodeMCU_PGM wifiServerCode[] = {
pkr7098 1:ed1c6618f739 82 "", 1,
pkr7098 1:ed1c6618f739 83 "http_resp = \"HTTP/1.0 200 OK\\r\\nContent-Type: text/html\\r\\n\\r\\n\"", 1,
pkr7098 1:ed1c6618f739 84 "srv = net.createServer(net.TCP)", 1,
pkr7098 1:ed1c6618f739 85 "srv:listen(80, function(conn)", 1,
pkr7098 1:ed1c6618f739 86 " conn:on(\"receive\", function(sck, payload)", 1,
pkr7098 1:ed1c6618f739 87 " if string.match(payload, \"NEW_ALARM_DATA\") then", 1,
pkr7098 1:ed1c6618f739 88 " i, j = string.find(payload, \"NEW_ALARM_DATA\")", 1,
pkr7098 1:ed1c6618f739 89 " i = i + 15", 1,
pkr7098 1:ed1c6618f739 90 " j = j + 14", 1,
pkr7098 1:ed1c6618f739 91 " print(\"@\"..string.sub(payload, i, j)..\"~\")", 1,
pkr7098 1:ed1c6618f739 92 " end", 1,
pkr7098 1:ed1c6618f739 93 " sck:send(http_resp)", 1,
pkr7098 1:ed1c6618f739 94 " sck:send(htmlTag)", 1,
pkr7098 1:ed1c6618f739 95 " sck:send(htmlOpenTag)", 1,
pkr7098 1:ed1c6618f739 96 " sck:send(headOpenTag)", 1,
pkr7098 1:ed1c6618f739 97 " sck:send(styleOpenTag)", 1,
pkr7098 1:ed1c6618f739 98 " sck:send(styleTag)", 1,
pkr7098 1:ed1c6618f739 99 " sck:send(styleCloseTag)", 1,
pkr7098 1:ed1c6618f739 100 " sck:send(headTag)", 1,
pkr7098 1:ed1c6618f739 101 " sck:send(headCloseTag)", 1,
pkr7098 1:ed1c6618f739 102
pkr7098 1:ed1c6618f739 103 " sck:send(bodyOpenTag)", 1,
pkr7098 1:ed1c6618f739 104 " sck:send(divOpenTag)", 1,
pkr7098 1:ed1c6618f739 105
pkr7098 1:ed1c6618f739 106
pkr7098 1:ed1c6618f739 107 " sck:send(brTags)", 1,
pkr7098 1:ed1c6618f739 108 " sck:send(table1OpenTag)", 1,
pkr7098 1:ed1c6618f739 109 " sck:send(table1HeadOpenTag)", 1,
pkr7098 1:ed1c6618f739 110 " sck:send(table1HeadRow1Tag)", 1,
pkr7098 1:ed1c6618f739 111 " sck:send(table1HeadRow2Tag)", 1,
pkr7098 1:ed1c6618f739 112 " sck:send(table1HeadRow3Tag)", 1,
pkr7098 1:ed1c6618f739 113 " sck:send(table1HeadCloseTag)", 1,
pkr7098 1:ed1c6618f739 114
pkr7098 1:ed1c6618f739 115 " sck:send(table1BodyOpenTag)", 1,
pkr7098 1:ed1c6618f739 116 " sck:send(string.format(table1BodyRow1Tag, timeState, timeHour, timeMinute, timeSecond))", 1,
pkr7098 1:ed1c6618f739 117 " sck:send(string.format(table1BodyRow2Tag, alarmState, alarmHour, alarmMinute, alarmSecond))", 1,
pkr7098 1:ed1c6618f739 118 " sck:send(string.format(table1BodyRow3Tag, temperature, temperatureUnit))", 1,
pkr7098 1:ed1c6618f739 119 " sck:send(string.format(table1BodyRow4Tag, ledState, ledColor))", 1,
pkr7098 1:ed1c6618f739 120 " sck:send(table1BodyCloseTag)", 1,
pkr7098 1:ed1c6618f739 121 " sck:send(table1CloseTag)", 1,
pkr7098 1:ed1c6618f739 122
pkr7098 1:ed1c6618f739 123 " sck:send(brTags)", 1,
pkr7098 1:ed1c6618f739 124
pkr7098 1:ed1c6618f739 125 " sck:send(table2OpenTag)", 1,
pkr7098 1:ed1c6618f739 126 " sck:send(table2HeadOpenTag)", 1,
pkr7098 1:ed1c6618f739 127 " sck:send(table2HeadRow1Tag)", 1,
pkr7098 1:ed1c6618f739 128 " sck:send(table2HeadRow2Tag)", 1,
pkr7098 1:ed1c6618f739 129 " sck:send(table2HeadRow3Tag)", 1,
pkr7098 1:ed1c6618f739 130 " sck:send(table2HeadCloseTag)", 1,
pkr7098 1:ed1c6618f739 131
pkr7098 1:ed1c6618f739 132 " sck:send(table2BodyOpenTag)", 1,
pkr7098 1:ed1c6618f739 133 // " sck:send(table2BodyRow1Tag)", 1,
pkr7098 1:ed1c6618f739 134 // " sck:send(table2BodyRow2Tag)", 1,
pkr7098 1:ed1c6618f739 135 " sck:send(table2BodyRow3Tag)", 1,
pkr7098 1:ed1c6618f739 136 // " sck:send(table2BodyRow4Tag)", 1,
pkr7098 1:ed1c6618f739 137 // " sck:send(table2BodyRow5Tag)", 1,
pkr7098 1:ed1c6618f739 138 " sck:send(table2BodyCloseTag)", 1,
pkr7098 1:ed1c6618f739 139 " sck:send(table2CloseTag)", 1,
pkr7098 1:ed1c6618f739 140
pkr7098 1:ed1c6618f739 141
pkr7098 1:ed1c6618f739 142 " sck:send(divCloseTag)", 1,
pkr7098 1:ed1c6618f739 143 " sck:send(bodyCloseTag)", 1,
pkr7098 1:ed1c6618f739 144 " sck:send(htmlCloseTag)", 1,
pkr7098 1:ed1c6618f739 145 " end)", 1,
pkr7098 1:ed1c6618f739 146 " conn:on(\"sent\", function(sck) sck:close() end)", 1,
pkr7098 1:ed1c6618f739 147 "end)", 1,
pkr7098 1:ed1c6618f739 148 NULL, 0,
pkr7098 1:ed1c6618f739 149 };
pkr7098 1:ed1c6618f739 150
pkr7098 1:ed1c6618f739 151 ESP_call_multi(wifiServerCode);
pkr7098 1:ed1c6618f739 152 }
pkr7098 1:ed1c6618f739 153
pkr7098 1:ed1c6618f739 154 void wifiGenerateValueF(const char *value, float data)
pkr7098 1:ed1c6618f739 155 {
pkr7098 1:ed1c6618f739 156 ESP.printf("%s = %f\r\n", value, data);
pkr7098 1:ed1c6618f739 157 }
pkr7098 1:ed1c6618f739 158
pkr7098 1:ed1c6618f739 159 void wifiGenerateValueI(const char *value, int data)
pkr7098 1:ed1c6618f739 160 {
pkr7098 1:ed1c6618f739 161 ESP.printf("%s = %d\r\n", value, data);
pkr7098 1:ed1c6618f739 162 }
pkr7098 1:ed1c6618f739 163
pkr7098 1:ed1c6618f739 164 void wifiGenerateValueS(const char *value, const char *data)
pkr7098 1:ed1c6618f739 165 {
pkr7098 1:ed1c6618f739 166 ESP.printf("%s = \"%s\"\r\n", value, data);
pkr7098 1:ed1c6618f739 167 }
pkr7098 1:ed1c6618f739 168
pkr7098 1:ed1c6618f739 169 void wifiGenerateValueS(const char *value, char *data)
pkr7098 1:ed1c6618f739 170 {
pkr7098 1:ed1c6618f739 171 ESP.printf("%s = \"%s\"\r\n", value, data);
pkr7098 1:ed1c6618f739 172 }
pkr7098 1:ed1c6618f739 173
pkr7098 1:ed1c6618f739 174 void wifiReceiveData(void)
pkr7098 1:ed1c6618f739 175 {
pkr7098 1:ed1c6618f739 176 int data = ESP.getc();
pkr7098 1:ed1c6618f739 177 if((data != ' ') && (data != '>')) {
pkr7098 1:ed1c6618f739 178 wifiReceivedBuffer[wifiReceivedBufferIndex++] = (char) data;
pkr7098 1:ed1c6618f739 179 if(data == '~') {
pkr7098 1:ed1c6618f739 180 wifiReceivedBuffer[wifiReceivedBufferIndex] = '\0';
pkr7098 1:ed1c6618f739 181 semaphoreWifiHasBuffer.release();
pkr7098 1:ed1c6618f739 182 }
pkr7098 1:ed1c6618f739 183 } else {
pkr7098 1:ed1c6618f739 184 wifiReceivedBuffer[0] = '\0';
pkr7098 1:ed1c6618f739 185 wifiReceivedBufferIndex = 0;
pkr7098 1:ed1c6618f739 186 }
pkr7098 1:ed1c6618f739 187 }
pkr7098 1:ed1c6618f739 188
pkr7098 1:ed1c6618f739 189 void wifiInitReceiveData(void)
pkr7098 1:ed1c6618f739 190 {
pkr7098 1:ed1c6618f739 191 ESP.attach(wifiReceiveData, Serial::RxIrq);
pkr7098 1:ed1c6618f739 192 }