
The final project of Embedde class.
Dependencies: C12832 LM75B ESP-call MMA7660
WIFI/WIFI.cpp@2:37756b51ccdb, 2021-06-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |