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