-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwifi.c
124 lines (91 loc) · 2.45 KB
/
wifi.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*
* wifi.c: wifi web server using esp8266 as blackbox
*
* Rafael Ignacio Zurita (c) 2022 <rafa@fi.uncoma.edu.ar>
*/
#include <string.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include "avr_serial.h"
int sprintf (char *__s, const char *__fmt,...);
/* Commands in PROGMEM Flash */
const __flash char mm1[] = "AT";
const __flash char mm2[] = "AT+RST";
const __flash char mm3[] = "AT+CWMODE=3";
const __flash char mm4[] = "AT+CWSAP=\"AVR_wifi_ESP\",,1,0";
const __flash char mm5[] = "AT+CIPMUX=1"; /* 0 : una conexion; 1 : hasta 4 conexiones */
const __flash char mm6[] = "AT+CIPSERVER=1,80";
const __flash char mm7[] = "AT+CIPSEND=%i,25"; /* en conexion 0 enviaremos 25 bytes */
const __flash char mm8[] = "<html><head></head><body>";
const __flash char mm9[] = "AT+CIPSEND=%i,19";
const __flash char mm10[] = "<h1>Web demo </h1>";
const __flash char mm11[] = "AT+CIPSEND=%i,45";
const __flash char mm12[] = "AT+CIPSEND=%i,14";
const __flash char mm13[] = "</body></html>";
const __flash char mm14[] = "AT+CIPCLOSE=%i";
int wait_connection() {
int found = 0;
char m[3];
char c;
m[0] = serial_get_char();
m[1] = serial_get_char();
while (!found) {
m[2] = serial_get_char();
if ((m[0] == 'I') && (m[1] == 'P') && (m[2] == 'D'))
found = 1;
else {
m[0]=m[1]; m[1]=m[2];
}
}
c = serial_get_char();
c = serial_get_char();
return (c-48);
}
void cipsend_n(char * dest2, char * dest, const __flash char src[], int n)
{
int i;
for (i=0; i<strlen_P(src); i++)
dest[i] = src[i];
dest[i] = 0;
sprintf(dest2, dest, n);
serial_put_str(dest2);
_delay_ms(400);
}
void wifi_web_server() {
char msg[46], msg2[20];
int n, i;
// AT y reset
serial_put_str2(mm1);
_delay_ms(400);
serial_put_str2(mm2);
_delay_ms(400);
// access point
serial_put_str2(mm3);
_delay_ms(400);
// canal 1, access point ESP, sin clave (el cero)
serial_put_str2(mm4);
_delay_ms(400);
// mult conexiones
serial_put_str2(mm5);
_delay_ms(400);
// servidor web
serial_put_str2(mm6);
_delay_ms(400);
while(1) {
n = wait_connection();
cipsend_n(msg, msg2, mm7, n);
serial_put_str2(mm8);
_delay_ms(400);
cipsend_n(msg, msg2, mm9, n);
serial_put_str2(mm10);
_delay_ms(400);
cipsend_n(msg, msg2, mm11, n);
sprintf(msg, "<p>Web page example. Connection number: %i </p>", n);
serial_put_str(msg);
_delay_ms(400);
cipsend_n(msg, msg2, mm12, n);
serial_put_str2(mm13);
_delay_ms(400);
cipsend_n(msg, msg2, mm14, n);
}
}