1+ from micropython import const
2+ from utime import sleep_ms , ticks_ms
3+
4+
5+ tx_buffer_size = const (1024 )
6+ rx_buffer_size = const (2048 )
7+
8+ default_timeout = const (2000 )
9+
10+
11+ class wifi ():
12+
13+ def __init__ (self , _uart ):
14+
15+ self .uart = _uart
16+
17+ self .rxd = bytearray (rx_buffer_size )
18+
19+ self .STA_mode = const (1 )
20+ self .AP_mode = const (2 )
21+ self .STA_AP_mode = const (3 )
22+
23+ self .single_connection = const (0 )
24+ self .multi_connection = const (1 )
25+
26+ sleep_ms (100 )
27+ self .test ()
28+ self .get_firmware_version ()
29+
30+
31+ def send_cmd (self , cmd , ack , print_res = False , timeout = default_timeout ):
32+ self .rxd = []
33+
34+ try :
35+ self .uart .write (cmd + "\r \n " )
36+ except :
37+ print ("Error sending command!" )
38+
39+ t = ticks_ms ()
40+ while ((ticks_ms () - t ) < timeout ):
41+ pass
42+
43+ try :
44+ self .rxd = self .uart .read ()
45+
46+ except :
47+ print ("Error reading response!" )
48+
49+ if (self .rxd != None ):
50+ try :
51+ self .rxd = self .rxd .decode ('utf-8' )
52+
53+ if (print_res == True ):
54+ print (self .rxd )
55+
56+ if (self .rxd .find (ack ) >= 0 ):
57+ return True
58+
59+ except :
60+ return False
61+
62+ return False
63+
64+
65+ def test (self , echo = False ):
66+ self .send_cmd ("AT" , "OK" , echo )
67+
68+
69+ def reset (self ):
70+ self .uart .write ("AT+RST\r \n " , 40000 )
71+
72+
73+ def get_firmware_version (self , echo = True ):
74+ return self .send_cmd ("AT+GMR" , "OK" , echo )
75+
76+
77+ def factory_reset (self ):
78+ return self .send_cmd ("AT+RESTORE" , "OK" , False )
79+
80+
81+ def scan (self , echo = True ):
82+ return self .send_cmd ("AT+CWLAP" , "OK" , echo , 6000 )
83+
84+
85+ def set_mode (self , mode , echo = False ):
86+ return self .send_cmd (("AT+CWMODE_CUR=" + str (mode )), "OK" , echo )
87+
88+
89+ def get_mode (self , echo = False ):
90+ self .send_cmd ("AT+CWMODE?" , "OK" , echo )
91+ m = self .rxd .find (":" )
92+ m = int (self .rxd [(m + 1 ) : (m + 2 )])
93+ return m
94+
95+
96+ def set_connections (self , mode , echo = False ):
97+ return self .send_cmd (("AT+CIPMUX=" + str (mode )), "OK" , echo )
98+
99+
100+ def get_connections (self , echo = False ):
101+ self .send_cmd ("AT+CIPMUX?" , "OK" , echo )
102+ m = self .rxd .find (":" )
103+ m = int (self .rxd [(m + 1 ) : (m + 2 )])
104+ return m
105+
106+
107+ def set_SSID_password (self , SSID , PW , echo = False ):
108+ return self .send_cmd ("AT+CWJAP_CUR=\" " + SSID + "\" ,\" " + PW + "\" " , "OK" , echo , 20000 )
109+
110+
111+ def get_connection_status (self , echo = False ):
112+ m = - 1
113+ self .send_cmd ("AT+CWJAP?" , "OK" , echo )
114+ try :
115+ m = self .rxd .find ("No AP" )
116+ except :
117+ print ("Error!" )
118+ if (m < 0 ):
119+ return True
120+ else :
121+ return False
122+
123+
124+ def get_IP (self , echo = False ):
125+ self .send_cmd ("AT+CIFSR" , "OK" , echo )
126+ ap_ip = self .search (":APIP," , '"' )
127+ ap_mac = self .search (":APMAC," , '"' )
128+ sta_ip = self .search (":STAIP," , '"' )
129+ sta_mac = self .search (":STAMAC," , '"' )
130+
131+ return ap_ip , ap_mac , sta_ip , sta_mac
132+
133+
134+ def close_connection (self , echo = False ):
135+ return self .send_cmd ("AT+CIPCLOSE" , "CLOSED" , echo )
136+
137+
138+ def search (self , s , e , offset_s = 0 , offset_e = 0 ):
139+ m = self .rxd .find (s )
140+ l = len (s )
141+ l += 1
142+ temp = self .rxd [(m + l ) : ]
143+ n = temp .find (e )
144+ return temp [offset_s : (n + offset_e )]
145+
146+
147+ def http_get (self , _url , header = "" , http_ver = "1.1" , port = 80 , timeout = 10000 , echo = False ):
148+ m = _url .find ("/" )
149+ url = _url [0 : m ]
150+ path = _url [m : ]
151+ raw = "GET "
152+ raw = raw + path
153+ raw = raw + " HTTP/" + http_ver + "\r \n "
154+ raw = raw + "Host: " + url + "\r \n "
155+ raw = raw + header + "\r \n "
156+ self .send_cmd ("AT+CIPSTART=\" TCP\" ,\" " + url + "\" ," + str (port ), "OK" , echo , timeout )
157+ self .send_cmd (("AT+CIPSENDEX=" + str (len (_url ) + 25 )), ">" , echo )
158+ return self .send_cmd (raw , "CLOSED" , (timeout / 2 ))
159+
160+
161+ def http_post (self , _url , header = "" , content = '' , content_info = "" , http_ver = "1.1" , port = 80 , timeout = 10000 , echo = False ):
162+ content_length = len (content )
163+ m = _url .find ("/" )
164+ url = _url [0 : m ]
165+ path = _url [m : ]
166+ raw = "POST "
167+ raw = raw + path
168+ raw = raw + " HTTP/" + http_ver + "\r \n "
169+ raw = raw + "Host: " + url + "\r \n "
170+ raw = raw + header
171+ raw = raw + content_info + str (content_length ) + "\r \n "
172+ raw = raw + "\r \n " + content + "\r \n \r \n "
173+ str_length = len (raw )
174+ self .send_cmd ("AT+CIPSTART=\" TCP\" ,\" " + url + "\" ," + str (port ), "OK" , echo , timeout )
175+ self .send_cmd (("AT+CIPSENDEX=" + str (str_length )), ">" , echo )
176+ self .send_cmd ((raw + "\r \n " ), "OK" , (timeout / 2 ))
177+ return self .send_cmd ("AT+CIPCLOSE" , "CLOSED" , (timeout / 2 ))
178+
179+
180+ def requested_data (self , string ):
181+ if (string != None ):
182+ n1 = string .find ("{" )
183+ msg_string = string [n1 : ]
184+ length = len (msg_string )
185+ msg_string = string [n1 : (n1 + length - 8 )]
186+
187+ return msg_string
188+
0 commit comments