Skip to content

Commit 7817e24

Browse files
authored
Add files via upload
1 parent dfe7d9b commit 7817e24

File tree

4 files changed

+611
-0
lines changed

4 files changed

+611
-0
lines changed

OpenWeather Map API/SSD1306_I2C.py

+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
from micropython import const
2+
from utime import sleep_ms
3+
import framebuf
4+
5+
6+
disp_width = const(128)
7+
disp_height = const(64)
8+
disp_pages = const((disp_height >> 3))
9+
10+
# Constants
11+
SSD1306_I2C_address = const(0x3C)
12+
13+
SSD1306_SET_CONTRAST = const(0x81)
14+
SSD1306_DISPLAY_ALL_ON_RESUME = const(0xA4)
15+
SSD1306_DISPLAY_ALL_ON = const(0xA5)
16+
SSD1306_NORMAL_DISPLAY = const(0xA6)
17+
SSD1306_INVERT_DISPLAY = const(0xA7)
18+
SSD1306_DISPLAY_OFF = const(0xAE)
19+
SSD1306_DISPLAY_ON = const(0xAF)
20+
SSD1306_SET_DISPLAY_OFFSET = const(0xD3)
21+
SSD1306_SET_COM_PINS = const(0xDA)
22+
SSD1306_SET_VCOM_DETECT = const(0xDB)
23+
SSD1306_SET_DISPLAY_CLOCK_DIV = const(0xD5)
24+
SSD1306_SET_PRECHARGE = const(0xD9)
25+
SSD1306_SET_MULTIPLEX = const(0xA8)
26+
SSD1306_SET_LOW_COLUMN = const(0x00)
27+
SSD1306_SET_HIGH_COLUMN = const(0x10)
28+
SSD1306_SET_START_LINE = const(0x40)
29+
SSD1306_MEMORY_MODE = const(0x20)
30+
SSD1306_COLUMN_ADDR = const(0x21)
31+
SSD1306_PAGE_ADDR = const(0x22)
32+
SSD1306_COM_SCAN_INC = const(0xC0)
33+
SSD1306_COM_SCAN_DEC = const(0xC8)
34+
SSD1306_SEG_REMAP = const(0xA0)
35+
SSD1306_CHARGE_PUMP = const(0x8D)
36+
SSD1306_EXTERNAL_VCC = const(0x01)
37+
SSD1306_SWITCH_CAP_VCC = const(0x02)
38+
39+
# Scrolling constants
40+
SSD1306_ACTIVATE_SCROLL = const(0x2F)
41+
SSD1306_DEACTIVATE_SCROLL = const(0x2E)
42+
SSD1306_SET_VERTICAL_SCROLL_AREA = const(0xA3)
43+
SSD1306_RIGHT_HORIZONTAL_SCROLL = const(0x26)
44+
SSD1306_LEFT_HORIZONTAL_SCROLL = const(0x27)
45+
SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL = const(0x29)
46+
SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL = const(0x2A)
47+
48+
49+
class OLED1306(framebuf.FrameBuffer):
50+
51+
def __init__(self, _i2c, _i2c_addr = SSD1306_I2C_address):
52+
self.width = disp_width
53+
self.height = disp_height
54+
self._pages = disp_pages
55+
56+
self.WHITE = 1
57+
self.BLACK = 0
58+
59+
self.i2c = _i2c
60+
self.i2c_addr = _i2c_addr
61+
62+
self.temp = bytearray(2)
63+
self.write_list = [b"\x40", None]
64+
65+
self.buffer = bytearray(self._pages * self.width)
66+
super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
67+
self.init_display()
68+
69+
70+
def write_command(self, cmd):
71+
self.temp[0] = 0x80
72+
self.temp[1] = cmd
73+
self.i2c.writeto(self.i2c_addr, self.temp)
74+
75+
76+
def write_data(self, value):
77+
self.write_list[1] = value
78+
self.i2c.writevto(self.i2c_addr, self.write_list)
79+
80+
81+
def init_display(self):
82+
self.write_command(SSD1306_DISPLAY_OFF)
83+
self.write_command(SSD1306_SET_DISPLAY_CLOCK_DIV)
84+
self.write_command(0x80)
85+
86+
self.write_command(SSD1306_SET_MULTIPLEX)
87+
self.write_command((self.height - 1))
88+
89+
self.write_command(SSD1306_SET_DISPLAY_OFFSET)
90+
self.write_command(0x00)
91+
92+
self.write_command((SSD1306_SET_START_LINE | 0x00))
93+
94+
self.write_command(SSD1306_CHARGE_PUMP)
95+
self.write_command(0x14) # 0x10 # 0x14
96+
97+
self.write_command(SSD1306_MEMORY_MODE)
98+
self.write_command(0x00)
99+
100+
self.write_command((SSD1306_SEG_REMAP | 0x01))
101+
self.write_command(SSD1306_COM_SCAN_DEC)
102+
self.write_command(SSD1306_SET_COM_PINS)
103+
self.write_command(0x12)
104+
105+
self.write_command(SSD1306_SET_CONTRAST)
106+
self.write_command(0xCF) # 0x9F # 0xCF
107+
108+
self.write_command(SSD1306_SET_PRECHARGE)
109+
self.write_command(0xF1) # 0x22 # 0xF1
110+
111+
self.write_command(SSD1306_SET_VCOM_DETECT)
112+
self.write_command(0x40)
113+
114+
self.write_command(SSD1306_DISPLAY_ALL_ON_RESUME)
115+
self.write_command(SSD1306_NORMAL_DISPLAY)
116+
self.write_command(SSD1306_DISPLAY_ON)
117+
118+
119+
def show(self):
120+
x0 = 0
121+
x1 = (self.width - 1)
122+
if (self.width == 64):
123+
# displays with width of 64 pixels are shifted by 32
124+
x0 += 32
125+
x1 += 32
126+
127+
self.write_command(SSD1306_COLUMN_ADDR)
128+
self.write_command(x0)
129+
self.write_command(x1)
130+
self.write_command(SSD1306_PAGE_ADDR)
131+
self.write_command(0x00)
132+
self.write_command((self._pages - 1))
133+
self.write_data(self.buffer)

OpenWeather Map API/WiFi.py

+188
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
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

Comments
 (0)