From cd2deeaa2a6d997a8676b97d0dcfdd821cfef308 Mon Sep 17 00:00:00 2001 From: 0x1abin <270995079@qq.com> Date: Thu, 19 Apr 2018 11:03:08 +0800 Subject: [PATCH] update spi speed --- .../components/internalfs_image/image/main.py | 2 +- .../internalfs_image/image_go/boot.py | 7 - .../image_go/examples/main.py | 34 -- .../image_go/examples/mqtt_example.py | 22 - .../image_go/examples/ssd1306_spi_example.py | 27 -- .../image_go/examples/tftdemo.py | 283 ------------- .../image_go/examples/thread_example.py | 145 ------- .../image_go/examples/webserver_example.py | 61 --- .../image_go/fonts/BigFont.fon | Bin 3052 -> 0 bytes .../image_go/fonts/DejaVuSans12.fon | Bin 1166 -> 0 bytes .../image_go/fonts/DejaVuSans18.fon | Bin 1836 -> 0 bytes .../image_go/fonts/DejaVuSans24.fon | Bin 2732 -> 0 bytes .../image_go/fonts/DotMatrix_M.fon | Bin 4192 -> 0 bytes .../image_go/fonts/Grotesk24x48.fon | Bin 13692 -> 0 bytes .../image_go/fonts/OCR_A_Extended_M.c | 119 ------ .../image_go/fonts/arial_bold.fon | Bin 3052 -> 0 bytes .../image_go/fonts/swiss721_outline.fon | Bin 3052 -> 0 bytes .../image_go/lib/LoRaReceiver.py | 13 - .../image_go/lib/LoRaSender.py | 14 - .../internalfs_image/image_go/lib/bme280.py | 206 ---------- .../image_go/lib/config_lora.py | 30 -- .../image_go/lib/controller.py | 122 ------ .../image_go/lib/controller_esp.py | 163 -------- .../internalfs_image/image_go/lib/led.py | 11 - .../internalfs_image/image_go/lib/sx127x.py | 389 ------------------ .../internalfs_image/image_go/main.py | 34 -- .../internalfs_image/image_go/spiffs.info | 11 - .../internalfs_image/image_go/www/favicon.ico | Bin 7902 -> 0 bytes .../internalfs_image/image_go/www/index.html | 28 -- .../image_go/www/pdf-sample.pdf | Bin 7945 -> 0 bytes .../internalfs_image/image_go/www/pdf.png | Bin 4551 -> 0 bytes .../internalfs_image/image_go/www/style.css | 36 -- .../internalfs_image/image_go/www/test.pyhtml | 34 -- .../internalfs_image/spiffs_image.img | Bin 1048576 -> 0 bytes .../micropython/esp32/modules/inisetup.py | 2 +- 35 files changed, 2 insertions(+), 1791 deletions(-) delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/boot.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/examples/main.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/examples/mqtt_example.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/examples/ssd1306_spi_example.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/examples/tftdemo.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/examples/thread_example.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/examples/webserver_example.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/fonts/BigFont.fon delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/fonts/DejaVuSans12.fon delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/fonts/DejaVuSans18.fon delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/fonts/DejaVuSans24.fon delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/fonts/DotMatrix_M.fon delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/fonts/Grotesk24x48.fon delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/fonts/OCR_A_Extended_M.c delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/fonts/arial_bold.fon delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/fonts/swiss721_outline.fon delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/lib/LoRaReceiver.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/lib/LoRaSender.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/lib/bme280.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/lib/config_lora.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/lib/controller.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/lib/controller_esp.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/lib/led.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/lib/sx127x.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/main.py delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/spiffs.info delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/www/favicon.ico delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/www/index.html delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/www/pdf-sample.pdf delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/www/pdf.png delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/www/style.css delete mode 100644 MicroPython_BUILD/components/internalfs_image/image_go/www/test.pyhtml delete mode 100644 MicroPython_BUILD/components/internalfs_image/spiffs_image.img diff --git a/MicroPython_BUILD/components/internalfs_image/image/main.py b/MicroPython_BUILD/components/internalfs_image/image/main.py index a803e8d..bdd7fd5 100644 --- a/MicroPython_BUILD/components/internalfs_image/image/main.py +++ b/MicroPython_BUILD/components/internalfs_image/image/main.py @@ -3,7 +3,7 @@ import machine, network, utime print("") print("Starting WiFi ...") sta_if = network.WLAN(network.STA_IF); sta_if.active(True) -sta_if.connect("MasterHax_5G", "wittyercheese551") +sta_if.connect("mySSID", "wifi_password") tmo = 50 while not sta_if.isconnected(): utime.sleep_ms(100) diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/boot.py b/MicroPython_BUILD/components/internalfs_image/image_go/boot.py deleted file mode 100644 index aabbc23..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/boot.py +++ /dev/null @@ -1,7 +0,0 @@ -# This file is executed on every boot (including wake-boot from deepsleep) - -import sys - -# Set default path -# Needed for importing modules and upip -sys.path[1] = '/flash/lib' diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/examples/main.py b/MicroPython_BUILD/components/internalfs_image/image_go/examples/main.py deleted file mode 100644 index bdd7fd5..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/examples/main.py +++ /dev/null @@ -1,34 +0,0 @@ -import machine, network, utime - -print("") -print("Starting WiFi ...") -sta_if = network.WLAN(network.STA_IF); sta_if.active(True) -sta_if.connect("mySSID", "wifi_password") -tmo = 50 -while not sta_if.isconnected(): - utime.sleep_ms(100) - tmo -= 1 - if tmo == 0: - sta_if.disconnect() - break - -if tmo > 0: - print("WiFi started") - utime.sleep_ms(500) - - rtc = machine.RTC() - print("Synchronize time from NTP server ...") - rtc.ntp_sync(server="hr.pool.ntp.org") - tmo = 100 - while not rtc.synced(): - utime.sleep_ms(100) - tmo -= 1 - if tmo == 0: - break - - if tmo > 0: - print("Time set") - utime.sleep_ms(500) - t = rtc.now() - utime.strftime("%c") - print("") diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/examples/mqtt_example.py b/MicroPython_BUILD/components/internalfs_image/image_go/examples/mqtt_example.py deleted file mode 100644 index cbd7a86..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/examples/mqtt_example.py +++ /dev/null @@ -1,22 +0,0 @@ - -def conncb(task): - print("[{}] Connected".format(task)) - -def disconncb(task): - print("[{}] Disconnected".format(task)) - -def subscb(task): - print("[{}] Subscribed".format(task)) - -def pubcb(pub): - print("[{}] Published: {}".format(pub[0], pub[1])) - -def datacb(msg): - print("[{}] Data arrived from topic: {}, Message:\n".format(msg[0], msg[1]), msg[2]) - -mqtt = network.mqtt("loboris", "loboris.eu", user="wifimcu", password="wifimculobo", cleansession=True, connected_cb=conncb, disconnected_cb=disconncb, subscribed_cb=subscb, published_cb=pubcb, data_cb=datacb) - -mqtts = network.mqtt("eclipse", "iot.eclipse.org", secure=True, cleansession=True, connected_cb=conncb, disconnected_cb=disconncb, subscribed_cb=subscb, published_cb=pubcb, data_cb=datacb) - - - diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/examples/ssd1306_spi_example.py b/MicroPython_BUILD/components/internalfs_image/image_go/examples/ssd1306_spi_example.py deleted file mode 100644 index 6dec2ef..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/examples/ssd1306_spi_example.py +++ /dev/null @@ -1,27 +0,0 @@ -import machine -from ssd1306 import SSD1306_SPI - -WIDTH = const(128) -HEIGHT = const (64) -pdc = machine.Pin(27, machine.Pin.OUT) -pcs = machine.Pin(26, machine.Pin.OUT) -sck_pin = machine.Pin(19, machine.Pin.OUT) -mosi_pin = machine.Pin(23, machine.Pin.IN) -miso_pin = machine.Pin(25, machine.Pin.OUT) - -prst = machine.Pin(18, machine.Pin.OUT) - -spi = machine.SPI(1,baudrate=1000000, sck=sck_pin, mosi=mosi_pin, miso=miso_pin) - -ssd = SSD1306_SPI(WIDTH, HEIGHT, spi, pdc, prst, pcs) - -import freesans20 - -from writer import Writer -wri2 = Writer(ssd, freesans20, verbose=True) - -Writer.set_clip(True, True) -Writer.set_textpos(0, 0) -wri2.printstring('MicroPython\n') - -ssd.show() diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/examples/tftdemo.py b/MicroPython_BUILD/components/internalfs_image/image_go/examples/tftdemo.py deleted file mode 100644 index ddf72ea..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/examples/tftdemo.py +++ /dev/null @@ -1,283 +0,0 @@ -""" -Demo program demonstrating the capabities of the MicroPython display module -Author: LoBo (https://github/loboris) -Date: 08/10/2017 - -""" - -import machine, display, time, math - -tft = display.TFT() - -#ESP32-WROVER-KIT v3: -#tft.init(tft.ST7789, rst_pin=18, backl_pin=5, miso=25,mosi=23,clk=19,cs=22,dc=21) - -#Adafruit: -#tft.init(tft.ILI9341, width=240, height=320, miso=19,mosi=18,clk=5,cs=15,dc=33, bgr=True) - -#Set correct configuration -tft.init(tft.ILI9341, width=240, height=320, miso=19,mosi=23,clk=18,cs=5,dc=26,tcs=27,hastouch=True, bgr=True) - -maxx = 240 -maxy = 320 -miny = 12 -touch = False - -# fonts used in this demo -fontnames = ( - tft.FONT_Default, - tft.FONT_7seg, - tft.FONT_Ubuntu, - tft.FONT_Comic, - tft.FONT_Tooney, - tft.FONT_Minya -) - - -# Check if the display is touched -#------------- -def touched(): - if not touch: - return False - else: - tch,_,_ = tft.gettouch() - if tch <= 0: - return False - else: - return True - -# print display header -#---------------------- -def header(tx, setclip): - # adjust screen dimensions (depends on used display and orientation) - global maxx, maxy, miny - - maxx, maxy = tft.screensize() - tft.clear() - if maxx < 240: - tft.font(tft.FONT_Small, rotate=0) - else: - tft.font(tft.FONT_Default, rotate=0) - _,miny = tft.fontSize() - miny += 5 - tft.rect(0, 0, maxx-1, miny-1, tft.OLIVE, tft.DARKGREY) - tft.text(tft.CENTER, 2, tx, tft.CYAN, transparent=True) - - if setclip: - tft.setwin(0, miny, maxx, maxy) - -# Display some fonts -#------------------- -def dispFont(sec=5): - header("DISPLAY FONTS", False) - - if maxx < 240: - tx = "MicroPython" - else: - tx = "Hi from MicroPython" - starty = miny + 4 - - n = time.time() + sec - while time.time() < n: - y = starty - x = 0 - i = 0 - while y < maxy: - if i == 0: - x = 0 - elif i == 1: - x = tft.CENTER - elif i == 2: - x = tft.RIGHT - i = i + 1 - if i > 2: - i = 0 - - for font in fontnames: - if font == tft.FONT_7seg: - tft.font(font) - tft.text(x,y,"-12.45/",machine.random(0xFFFFFF)) - else: - tft.font(font) - tft.text(x,y,tx, machine.random(0xFFFFFF)) - _,fsz = tft.fontSize() - y = y + 2 + fsz - if y > (maxy-fsz): - y = maxy - if touched(): - break - -# Display random fonts -#------------------------------ -def fontDemo(sec=5, rot=False): - tx = "FONTS" - if rot: - tx = "ROTATED " + tx - header(tx, True) - - tx = "ESP32-MicrpPython" - n = time.time() + sec - while time.time() < n: - frot = 0 - if rot: - frot = math.floor(machine.random(359)/5)*5 - for font in fontnames: - if (not rot) or (font != tft.FONT_7seg): - x = machine.random(maxx-8) - if font != tft.FONT_7seg: - tft.font(font, rotate=frot) - _,fsz = tft.fontSize() - y = machine.random(miny, maxy-fsz) - tft.text(x,y,tx, machine.random(0xFFFFFF)) - else: - l = machine.random(6,12) - w = machine.random(1,l // 3) - tft.font(font, rotate=frot, dist=l, width=w) - _,fsz = tft.fontSize() - y = machine.random(miny, maxy-fsz) - tft.text(x,y,"-12.45/", machine.random(0xFFFFFF)) - if touched(): - break - tft.resetwin() - -# Display random lines -#------------------- -def lineDemo(sec=5): - header("LINE DEMO", True) - - n = time.time() + sec - while time.time() < n: - x1 = machine.random(maxx-4) - y1 = machine.random(miny, maxy-4) - x2 = machine.random(maxx-1) - y2 = machine.random(miny, maxy-1) - color = machine.random(0xFFFFFF) - tft.line(x1,y1,x2,y2,color) - if touched(): - break - tft.resetwin() - -# Display random circles -#---------------------------------- -def circleDemo(sec=5,dofill=False): - tx = "CIRCLE" - if dofill: - tx = "FILLED " + tx - header(tx, True) - - n = time.time() + sec - while time.time() < n: - color = machine.random(0xFFFFFF) - fill = machine.random(0xFFFFFF) - x = machine.random(4, maxx-2) - y = machine.random(miny+2, maxy-2) - if x < y: - r = machine.random(2, x) - else: - r = machine.random(2, y) - if dofill: - tft.circle(x,y,r,color,fill) - else: - tft.circle(x,y,r,color) - if touched(): - break - tft.resetwin() - -#------------------ -def circleSimple(): - tx = "CIRCLE" - header(tx, True) - - x = 110 - y = 160 - r = 110 - z = 0 - while z < 12: - color = machine.random(0xFFFFFF) - fill = machine.random(0xFFFFFF) - tft.circle(x,y,r,color,fill) - r -= 10 - x += 10 - z += 1 - -# Display random ellipses -#----------------------------------- -def ellipseDemo(sec=5,dofill=False): - tx = "ELLIPSE" - if dofill: - tx = "FILLED " + tx - header(tx, True) - - n = time.time() + sec - while time.time() < n: - x = machine.random(4, maxx-2) - y = machine.random(miny+2, maxy-2) - if x < y: - rx = machine.random(2, x) - else: - rx = machine.random(2, y) - if x < y: - ry = machine.random(2, x) - else: - ry = machine.random(2, y) - color = machine.random(0xFFFFFF) - if dofill: - fill = machine.random(0xFFFFFF) - tft.ellipse(x,y,rx,ry,15, color,fill) - else: - tft.ellipse(x,y,rx,ry,15,color) - if touched(): - break - tft.resetwin() - -# Display random rectangles -#--------------------------------- -def rectDemo(sec=5, dofill=False): - tx = "RECTANGLE" - if dofill: - tx = "FILLED " + tx - header(tx, True) - - n = time.time() + sec - while time.time() < n: - x = machine.random(4, maxx-2) - y = machine.random(miny, maxy-2) - w = machine.random(2, maxx-x) - h = machine.random(2, maxy-y) - color = machine.random(0xFFFFFF) - if dofill: - fill = machine.random(0xFFFFFF) - tft.rect(x,y,w,h,color,fill) - else: - tft.rect(x,y,w,h,color) - if touched(): - break - tft.resetwin() - -# Display random rounded rectangles -#-------------------------------------- -def roundrectDemo(sec=5, dofill=False): - tx = "ROUND RECT" - if dofill: - tx = "FILLED " + tx - header(tx, True) - - n = time.time() + sec - while time.time() < n: - x = machine.random(2, maxx-18) - y = machine.random(miny, maxy-18) - w = machine.random(12, maxx-x) - h = machine.random(12, maxy-y) - if w > h: - r = machine.random(2, h // 2) - else: - r = machine.random(2, w // 2) - color = machine.random(0xFFFFFF) - if dofill: - fill = machine.random(0xFFFFFF) - tft.roundrect(x,y,w,h,r,color,fill) - else: - tft.roundrect(x,y,w,h,r,color) - if touched(): - break - tft.resetwin() diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/examples/thread_example.py b/MicroPython_BUILD/components/internalfs_image/image_go/examples/thread_example.py deleted file mode 100644 index 828d3f5..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/examples/thread_example.py +++ /dev/null @@ -1,145 +0,0 @@ -import machine, _thread, time -import micropython, gc -import bme280 - -# Setup the LED pins -bled = machine.Pin(4, mode=machine.Pin.OUT) -#rled = machine.Pin(0, mode=machine.Pin.OUT) -#gled = machine.Pin(2, mode=machine.Pin.OUT) - -bled.value(0) -#gled.value(0) -#rled.value(0) - -# Setup I2C to be used with BME280 sensor -i2c=machine.I2C(scl=machine.Pin(26),sda=machine.Pin(25),speed=400000) -# Initialize BME280 -bme=bme280.BME280(i2c=i2c) - -# Define LED thread function -#--------------------------- -def rgbled(n=200, led=bled): - notif_exit = 4718 - notif_replay = 2 - notif_count = 3 - x = 0 - _thread.allowsuspend(True) - while True: - led.value(1) - time.sleep_ms(n) - led.value(0) - x = x + 1 - - t = 10 - while t > 0: - notif = _thread.getnotification() - if notif == notif_exit: - _thread.sendmsg(_thread.getReplID(), "[%s] Exiting" % (_thread.getSelfName())) - return - elif notif == notif_replay: - _thread.sendmsg(_thread.getReplID(), "[%s] I've been notified" % (_thread.getSelfName())) - elif notif == notif_count: - _thread.sendmsg(_thread.getReplID(), "[%s] Run counter = %u" % (_thread.getSelfName(), x)) - elif notif == 777: - _thread.sendmsg(_thread.getReplID(), "[%s] Forced EXCEPTION" % (_thread.getSelfName())) - time.sleep_ms(1000) - zz = 234 / 0 - elif notif != 0: - _thread.sendmsg(_thread.getReplID(), "[%s] Got unknown notification: %u" % (_thread.getSelfName(), notif)) - - typ, sender, msg = _thread.getmsg() - if msg: - _thread.sendmsg(_thread.getReplID(), "[%s] Message from '%s'\n'%s'" % (_thread.getSelfName(), _thread.getThreadName(sender), msg)) - time.sleep_ms(100) - t = t - 1 - gc.collect() - -# For LED thread we don't need more than 3K stack -_ = _thread.stack_size(3*1024) -# Start LED thread -#rth=_thread.start_new_thread("R_Led", rgbled, (100, rled)) - -time.sleep_ms(500) -#gth=_thread.start_new_thread("G_Led", rgbled, (250, gled)) -bth=_thread.start_new_thread("B_Led", rgbled, (100, bled)) - -# Function to generate BME280 values string -#--------------- -def bmevalues(): - t, p, h = bme.read_compensated_data() - - p = p // 256 - pi = p // 100 - pd = p - pi * 100 - - hi = h // 1024 - hd = h * 100 // 1024 - hi * 100 - #return "[{}] T={0:1g}C ".format(time.strftime("%H:%M:%S",time.localtime()), round(t / 100,1)) + "P={}.{:02d}hPa ".format(pi, pd) + "H={}.{:01d}%".format(hi, hd) - return "[{}] T={}C ".format(time.strftime("%H:%M:%S",time.localtime()), t / 100) + "P={}.{:02d}hPa ".format(pi, pd) + "H={}.{:02d}%".format(hi, hd) - -# Define BME280 thread function -#----------------------- -def bmerun(interval=60): - _thread.allowsuspend(True) - sendmsg = True - send_time = time.time() + interval - while True: - while time.time() < send_time: - notif = _thread.getnotification() - if notif == 10002: - _thread.sendmsg(_thread.getReplID(), bmevalues()) - elif notif == 10004: - sendmsg = False - elif notif == 10006: - sendmsg = True - elif (notif <= 3600) and (notif >= 10): - interval = notif - send_time = time.time() + interval - _thread.sendmsg(_thread.getReplID(), "Interval set to {} seconds".format(interval)) - - time.sleep_ms(100) - send_time = send_time + interval - if sendmsg: - _thread.sendmsg(_thread.getReplID(), bmevalues()) - -# 3K is enough for BME280 thread -_ = _thread.stack_size(3*1024) -# start the BME280 thread -bmeth=_thread.start_new_thread("BME280", bmerun, (60,)) - -# === In the 3rd thread we will run Neopixels rainbow demo === - -np=machine.Neopixel(machine.Pin(22), 24) - -# DEfine Neopixels thread function -#--------------- -def thrainbow(): - pos = 0 - bri = 0.02 - while True: - for i in range(0, 24): - dHue = 360.0/24*(pos+i); - hue = dHue % 360; - np.setHSB(i, hue, 1.0, bri, 1, False) - np.show() - notif = _thread.getnotification() - if (notif > 0) and (notif <= 100): - bri = notif / 100.0 - elif notif == 1000: - _thread.sendmsg(_thread.getReplID(), "[%s] Run counter = %u" % (_thread.getSelfName(), pos)) - pos = pos + 1 - -# Start the Neopixels thread -npth=_thread.start_new_thread("Neopixel", thrainbow, ()) - - -utime.sleep(1) - -machine.heap_info() -_thread.list() - -# Set neopixel brightnes (%) -#_thread.notify(npth, 20) -# Get counter value from Neopixel thread -#_thread.notify(npth, 1000) - diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/examples/webserver_example.py b/MicroPython_BUILD/components/internalfs_image/image_go/examples/webserver_example.py deleted file mode 100644 index 449290e..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/examples/webserver_example.py +++ /dev/null @@ -1,61 +0,0 @@ - -from microWebSrv import MicroWebSrv -import _thread - -def _httpHandlerTestGet(httpClient, httpResponse) : - content = """\ - - - - - TEST GET - - -

TEST GET

- Client IP address = %s -
-
- First name:
- Last name:
- -
- - - """ % httpClient.GetIPAddr() - httpResponse.WriteResponseOk( headers = None, - contentType = "text/html", - contentCharset = "UTF-8", - content = content ) - -def _httpHandlerTestPost(httpClient, httpResponse) : - formData = httpClient.ReadRequestPostedFormData() - firstname = formData["firstname"] - lastname = formData["lastname"] - escape = httpClient.GetServer().HTMLEscape - content = """\ - - - - - TEST POST - - -

TEST POST

- Firstname = %s
- Lastname = %s
- - - """ % (escape(firstname), escape(lastname)) - httpResponse.WriteResponseOk( headers = None, - contentType = "text/html", - contentCharset = "UTF-8", - content = content ) - -routeHandlers = [ - ( "/test", "GET", _httpHandlerTestGet ), - ( "/test", "POST", _httpHandlerTestPost ) -] - -srv = MicroWebSrv(routeHandlers=routeHandlers) - -srv.Start(threaded=True) diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/fonts/BigFont.fon b/MicroPython_BUILD/components/internalfs_image/image_go/fonts/BigFont.fon deleted file mode 100644 index c7b3c4811036ff0e7db0b21c987fab21a5904a92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3052 zcmWd-P>5$B0;9m2POyp zAM!t>9HboNKk)xxieQS6{~`YYBo2}XVLkyq1HJ-=2aE@p8`v563U~@Q3P9oz%+Da% z0D}As{2crmVp7{Rz4UPll}lTmw^uq*%_D{7!NRffGOmM@E`i2mTKr8dVNi9fXa` z#qvMoe?U~=Cn5UbYM2<<82A`u7%UhNVaOl@m*)Q<-x-@)q(IauzZc z{BZw+T+G}c-yq+>j0EN3^862E3S=x$Ot+A+K)4hk&wPOS07C(Tg^Yzv0sjNI10FCw zV1B^%faih41F#PtFg##*zzp}P{0|uh2$X*y|ACSP~6EtO+fe`CJ*ux{|^SJPuUN^^n+-SdCcG#N3cNRFpLm| zupoH{EQ=B+G7NkS(DVmNZ(s!w0+hBuEEo-9gD{#76w^TR%m?^C$W=%{UCnra5$tXd z4Po*B00$0;_#*>>;Lw);zz&T8<^${x_zGa*iU?tl=^!ls0a60+S%A_vjEzVi>>v0* zaRN3K5|1(#d=~8R^dtX(uK=bCP8Z0-(}(;IJ_$Y!J_bGmu=xgj4164X5{UGLMV^6= zK_28ZFoxQ10ks<(zkC)j-!U-A6u_YT2l)>$whX+4;eP;$GgK0hei{Ej%LQ=xU{L^p z2zfbB30c7Rfd2rv6g|KP_OF};*l`RD4D#So2U7NcNe(^>ZguGBq+bAQ2gO24{W%4grWDm;{ABGa`IZ;}7Z@MEEg3 z;IH7b0BZyhH8Owre}MDBABYRk;vX892>-$J4+H-L_7C9PiJ$nH=Jbsb&FgLIt-~*Ls1&H{E$b(3T zxsY^#upg8oBrF6FIgdj|0#sIj>;_@>50LU0jfAIv0R{;Mv|Mb#AOo#v85kJYKOmroRKS(_&Ux3^OV&lX7pc1KoADTn>Z@|>bK~oGrJRN~@u{7L& zFm>R1pa5hWC@c}-$M6H*l z2h$6p`ENi>mMP%>018uB9Rzbf-v@pReo$ToV?_Feq)7$_{sRyegye^ojtmSC*E29M zqr{U;0nZ0^a2|u3Z@~vH1<><9s<{x;84n~`@sK$-vXo$gi-Z^^z%QE zF_1CfZ(x2PQ6Pa_|1&T$Ff*_-$RqMe0eb4rU~k|*0Ahp0kTED#LooXX<_DnGs64pFhpCZ&An`yD(n3{` zNkG(Jj6WbH20OS01l8^!J|i^!z~UPl4KZ210V2on0NnO?0O29*mY1=fV|m8{Y92%n Oj0_6!h)>JUD**s)8VlM0 diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/fonts/DejaVuSans12.fon b/MicroPython_BUILD/components/internalfs_image/image_go/fonts/DejaVuSans12.fon deleted file mode 100644 index 36e76bfcb5c404895f976eba326fa4b26adf7b65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1166 zcmZSJW?)d@VqjokQDkJ~WMci>pv1_`%*eW}L79nzgON)}q+UhkpN5ADBO5mphvKOf z4<4;5Xkt)hjHD895$uI0>};Fk)l}Nk|AN zG;t{WF$OEE5^%IINUkseb0m@`dFdbGFa>jdaoF$(Bv+V$IhGQ3=OltF%)y*L0!;!= z91a#>PPIjGwMB7-C4{4qc=ke4ffWlQ8zajZYZgX!MwW9n%p7ctT+DJ09>_7j6VmJ$k09D)`uATM(MPqNI3Mv6)g3SL*XBX z!XGzKNU;A=)otlEdN~ebXJju*G9NXsAT5gf+!P_;NTEQsA6ViXJGx| z;^O?Envs>8i9?dZDWOG?t%i}2hl%C?hgwEfZbpuS98NqfiUxHopkQYx?E4=S;1Qpe HpH~6^ROtF6 diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/fonts/DejaVuSans18.fon b/MicroPython_BUILD/components/internalfs_image/image_go/fonts/DejaVuSans18.fon deleted file mode 100644 index 0d609fb733721b76367eefd1052953c618ee8372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1836 zcmZP&Vqj35fx4Ws!)GKO9{*=opw7s|%E#e*iNW5_EW&Ss2-J9dtQZnHbssAJF4rVq#+ZpwGz0&%nlG*e3Cq$MBd$G7p0R zBPTB-x1Ifr8#Z$M?9B%s+&KUEfgvLYFB7-Lj~fzD@c+LNSY1uM;(-JM1F)$4`wzxo z!Mged4-70n{9$Koc<}%E0~1CrUPf+q#seF2ggK5G^8Ek*!GMRE!IY7Mmyx@!E+L_& z&YhW=x&2>_8CbiV{G1pbw$Fc$AAE4*{lf?5V0Hihv$3)9@$kq3grZ}=d`e4s*_z5e_IS8&w) z|9{}X0Wfjk|9>}-5Eq#D@81D1a0i*n#}6^J{lh=z13A10=Rf%2!N|qS#CPC>4L|dN z|Ns9pLs$nq8JT#Q*#7_jf53~8Rq#KX#4*F3WDxQ1fj7tiIwX?Y_Bp_IaDn$83@h*f1Y3@B>@>;Di4v#+dEkfnab_w39z4%y2-S`2!zgLx%OAI))H% z6#f7IACzezSqDmng3N)24>*uMm`VPVV+aFlIAF$>kj7?kmssHvN8KjC+u09bI1Bvx=DGZ!^ zjNFV32NH~L|A(k5|M@1Bg^P=kTVDQ|JoEqme;6C|iM|A{E(UJ2gjCML&&4Q^+;d#A&v4t}+_u~Na(ost1r`q~z)pR5BiZ1L9DB3DnZz9h zl`K4bNCxmTK+?_u8|H>8kXtza|7YWou`nq3|G%1nLy(D^UmjFmTYUIn0iq@3`D+-M vguvPT|A$(ziVr_PGBW)9G9X&w$A>yrP~u_WZ~uSz0mJ{G0FU^z{JatX&-s3b diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/fonts/DejaVuSans24.fon b/MicroPython_BUILD/components/internalfs_image/image_go/fonts/DejaVuSans24.fon deleted file mode 100644 index 5220bfc535e344df8616b83a8bf49af122a2e900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2732 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 diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/fonts/OCR_A_Extended_M.c b/MicroPython_BUILD/components/internalfs_image/image_go/fonts/OCR_A_Extended_M.c deleted file mode 100644 index 1104238..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/fonts/OCR_A_Extended_M.c +++ /dev/null @@ -1,119 +0,0 @@ -// OCR_A_Extended_M.c -// Font type : Full (95 characters) -// Font size : 16x24 pixels -// Memory usage : 4564 bytes - -#if defined(__AVR__) - #include - #define fontdatatype const uint8_t -#elif defined(__PIC32MX__) - #define PROGMEM - #define fontdatatype const unsigned char -#elif defined(__arm__) - #define PROGMEM - #define fontdatatype const unsigned char -#endif - -fontdatatype OCR_A_Extended_M[4564] PROGMEM={ -0x10,0x18,0x20,0x5F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ! -0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x1E,0x78,0x1E,0x78,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " -0x00,0x00,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x1F,0xF8,0x1F,0xF8,0x06,0x60,0x06,0x60,0x06,0x60,0x1F,0xF8,0x1F,0xF8,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // # -0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x1F,0xF8,0x1F,0xF8,0x18,0x00,0x18,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x18,0x00,0x18,0x1F,0xF8,0x1F,0xF8,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // $ -0x00,0x00,0x1C,0x00,0x1C,0x18,0x1C,0x18,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0xE0,0x00,0xC0,0x01,0x80,0x01,0x80,0x03,0x00,0x07,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x38,0x18,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // % -0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x0F,0xC0,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x0C,0xC0,0x07,0x80,0x07,0x00,0x0F,0x80,0x1D,0xC8,0x18,0xF8,0x18,0x70,0x18,0xF0,0x0F,0xD8,0x0F,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // & -0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' -0x00,0x00,0x00,0x30,0x00,0x60,0x00,0xC0,0x01,0x80,0x03,0x80,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x80,0x01,0x80,0x00,0xC0,0x00,0x60,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ( -0x00,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x01,0x80,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x01,0xC0,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ) -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x19,0x88,0x19,0x98,0x0F,0xF0,0x07,0xE0,0x03,0xC0,0x03,0xC0,0x07,0xE0,0x0F,0xF0,0x1D,0xB8,0x11,0x98,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // * -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x1F,0xF8,0x1F,0xF8,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // + -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // , -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // . -0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // / - -0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF8,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0 -0x00,0x00,0x1F,0x80,0x1F,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x98,0x01,0x98,0x01,0x98,0x01,0x98,0x01,0x98,0x01,0x98,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 1 -0x00,0x00,0x1F,0xF0,0x1F,0xF8,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x0F,0xF8,0x1F,0xF0,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2 -0x00,0x00,0x1F,0xF8,0x1F,0xFC,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x07,0xF8,0x07,0xF8,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x1F,0xFC,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 3 -0x00,0x00,0x18,0x00,0x18,0x00,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x1F,0xF8,0x1F,0xF8,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 4 -0x00,0x00,0x07,0xF8,0x07,0xF8,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x07,0xF0,0x07,0xF8,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x18,0x18,0x1F,0xF8,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 5 -0x00,0x00,0x1C,0x00,0x1C,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1F,0xF8,0x1F,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6 -0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x18,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7 -0x00,0x00,0x07,0xE0,0x07,0xE0,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x0F,0xF0,0x1F,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF8,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8 -0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF8,0x1F,0xF8,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ; -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x78,0x00,0xE0,0x01,0xC0,0x07,0x00,0x0E,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x01,0xC0,0x00,0xE0,0x00,0x78,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // < -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // = -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x1E,0x00,0x07,0x00,0x03,0x80,0x00,0xE0,0x00,0x70,0x00,0x38,0x00,0x70,0x00,0xE0,0x03,0x80,0x07,0x00,0x1E,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // > -0x00,0x00,0x00,0x20,0x00,0x60,0x01,0xF0,0x03,0x98,0x07,0x18,0x0E,0x18,0x18,0x70,0x10,0xE0,0x01,0xC0,0x03,0x80,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ? - -0x00,0x00,0x07,0xE0,0x0F,0xF0,0x18,0x18,0x18,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x0F,0x98,0x0F,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x0F,0xF0,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // @ -0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x0C,0x30,0x0F,0xF0,0x0F,0xF0,0x0C,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // A -0x00,0x00,0x1F,0xF0,0x1F,0xF8,0x18,0x1C,0x18,0x0C,0x18,0x0C,0x18,0x0C,0x18,0x0C,0x18,0x1C,0x1F,0xF8,0x1F,0xF8,0x18,0x1C,0x18,0x0C,0x18,0x0C,0x18,0x0C,0x18,0x0C,0x18,0x1C,0x1F,0xF8,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // B -0x00,0x00,0x01,0xFC,0x03,0xFC,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1C,0x00,0x0C,0x00,0x0E,0x00,0x06,0x00,0x07,0x00,0x03,0xFC,0x01,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // C -0x00,0x00,0x1F,0xC0,0x1F,0xE0,0x06,0x70,0x06,0x30,0x06,0x30,0x06,0x18,0x06,0x18,0x06,0x0C,0x06,0x0C,0x06,0x0C,0x06,0x0C,0x06,0x1C,0x06,0x18,0x06,0x38,0x06,0x30,0x06,0x70,0x1F,0xE0,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // D -0x00,0x00,0x1F,0xFC,0x1F,0xFC,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1F,0xC0,0x1F,0xC0,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1F,0xFC,0x1F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // E -0x00,0x00,0x1F,0xFC,0x1F,0xFC,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1F,0xF0,0x1F,0xF0,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // F -0x00,0x00,0x01,0xF8,0x03,0xF8,0x03,0x00,0x06,0x00,0x0E,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0F,0xF8,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // G -0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF8,0x1F,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // H -0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // I -0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x0C,0x18,0x0C,0x18,0x0C,0x18,0x0C,0x18,0x0C,0x18,0x0C,0x18,0x07,0xF0,0x03,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // J -0x00,0x00,0x18,0x0C,0x18,0x18,0x18,0x30,0x18,0x60,0x18,0xC0,0x19,0x80,0x1B,0x00,0x1E,0x00,0x1C,0x00,0x1E,0x00,0x1F,0x00,0x1B,0x80,0x19,0xC0,0x18,0xE0,0x18,0x70,0x18,0x30,0x18,0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // K -0x00,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // L -0x00,0x00,0x1C,0x38,0x1C,0x38,0x1E,0x78,0x1E,0xF8,0x1B,0xD8,0x19,0x98,0x19,0x98,0x19,0x98,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // M -0x00,0x00,0x1C,0x18,0x1C,0x18,0x1E,0x18,0x1E,0x18,0x1E,0x18,0x1B,0x18,0x1B,0x18,0x1B,0x18,0x19,0x98,0x19,0x98,0x18,0xD8,0x18,0xD8,0x18,0xD8,0x18,0x78,0x18,0x78,0x18,0x78,0x18,0x38,0x18,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // N -0x00,0x00,0x03,0xC0,0x03,0xC0,0x06,0x60,0x06,0x60,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x06,0x60,0x06,0x60,0x03,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // O - -0x00,0x00,0x1F,0xF0,0x1F,0xF0,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF0,0x1F,0xF0,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // P -0x00,0x00,0x00,0x70,0x00,0xF8,0x01,0xD8,0x03,0x98,0x07,0x18,0x0C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x98,0x19,0x98,0x19,0xF0,0x18,0xE0,0x19,0xC0,0x1B,0xE0,0x1F,0x78,0x0E,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Q -0x00,0x00,0x1F,0xF0,0x1F,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF8,0x1F,0xF0,0x19,0x80,0x19,0x80,0x18,0xC0,0x18,0xC0,0x18,0x60,0x18,0x60,0x18,0x30,0x18,0x30,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // R -0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x18,0x18,0x18,0x18,0x0C,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x00,0xC0,0x00,0x60,0x00,0x60,0x00,0x30,0x18,0x18,0x18,0x18,0x1F,0xF8,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // S -0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x19,0x98,0x19,0x98,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // T -0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0F,0xF0,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // U -0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x06,0x60,0x06,0x60,0x07,0xE0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // V -0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x19,0x98,0x0F,0xF0,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // W -0x00,0x00,0x18,0x18,0x18,0x18,0x0C,0x30,0x0C,0x30,0x06,0x60,0x06,0x60,0x03,0xC0,0x03,0xC0,0x01,0x80,0x01,0x80,0x03,0xC0,0x03,0xC0,0x06,0x60,0x06,0x60,0x0C,0x30,0x0C,0x30,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // X -0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0C,0x30,0x0E,0x60,0x07,0xE0,0x03,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Y -0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Z -0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // [ -0x00,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x07,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x00,0xC0,0x00,0xC0,0x00,0x60,0x00,0x70,0x00,0x30,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x00,0xD8,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ] -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x03,0xC0,0x03,0xC0,0x07,0xE0,0x07,0xE0,0x0E,0x70,0x0E,0x70,0x1C,0x30,0x1C,0x38,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00, // _ - -0x00,0x00,0x06,0x00,0x07,0xC0,0x03,0xE0,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ` -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x07,0xF0,0x00,0x18,0x00,0x18,0x00,0x18,0x0F,0xF8,0x0F,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0x1F,0xF8,0x0F,0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // a -0x00,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1B,0xE0,0x1F,0xF0,0x1E,0x38,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x18,0x1E,0x38,0x1F,0xF0,0x1B,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // b -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x07,0xFC,0x0E,0x00,0x1C,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1C,0x00,0x0E,0x00,0x07,0xFC,0x03,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // c -0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x07,0xD8,0x0F,0xF8,0x1C,0x78,0x18,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0x1C,0x78,0x0F,0xF8,0x07,0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // d -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x0F,0xF0,0x1C,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF8,0x1F,0xF8,0x18,0x00,0x18,0x00,0x1C,0x00,0x0F,0xF8,0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // e -0x00,0x00,0x00,0xFC,0x01,0xFC,0x03,0x80,0x03,0x00,0x03,0x00,0x0F,0xF0,0x0F,0xF0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // f -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xD8,0x0F,0xF8,0x1C,0x78,0x18,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0x1C,0x78,0x0F,0xF8,0x07,0xD8,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x38,0x0F,0xF0,0x0F,0xE0, // g -0x00,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x19,0xF0,0x1B,0xF0,0x1F,0x18,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // h -0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x0F,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x0F,0xF0,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // i -0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF8,0x03,0xF8,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x0C,0x18,0x0C,0x18,0x07,0xF0,0x03,0xE0, // j -0x00,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x30,0x18,0x60,0x18,0xC0,0x19,0x80,0x1B,0x80,0x1F,0x00,0x1E,0x00,0x1F,0x00,0x19,0x80,0x18,0xC0,0x18,0x60,0x18,0x30,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // k -0x00,0x00,0x0F,0x80,0x0F,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x0F,0xF0,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // l -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x78,0x3F,0xFC,0x39,0xCC,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // m -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0xF0,0x1B,0xF0,0x1F,0x18,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // n -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x0F,0xF0,0x1C,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x38,0x0F,0xF0,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // o - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0xC0,0x1F,0xE0,0x1E,0x70,0x1C,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x38,0x1E,0x70,0x1F,0xE0,0x1B,0xC0,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00, // p -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xD8,0x0F,0xF8,0x1C,0x78,0x18,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0x1C,0x78,0x0F,0xF8,0x07,0xD8,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18, // q -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0xF0,0x1B,0xF8,0x1F,0x0C,0x1C,0x0C,0x18,0x0C,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // r -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x18,0x18,0x18,0x00,0x1E,0x00,0x07,0x80,0x01,0xF0,0x00,0x70,0x00,0x18,0x00,0x18,0x18,0x18,0x1F,0xF0,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // s -0x00,0x00,0x00,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x1F,0xF8,0x1F,0xF8,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x0C,0x06,0x1C,0x03,0xF8,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // t -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0x18,0xF8,0x0F,0xD8,0x07,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // u -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x38,0x38,0x18,0x30,0x18,0x30,0x0C,0x60,0x0C,0x60,0x06,0xC0,0x06,0xC0,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // v -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x33,0xCC,0x1F,0xF8,0x1E,0x78,0x1C,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // w -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x1C,0x38,0x0C,0x30,0x06,0x60,0x03,0xC0,0x03,0xC0,0x01,0x80,0x03,0xC0,0x06,0xE0,0x0E,0x70,0x0C,0x30,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // x -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x38,0x38,0x18,0x30,0x18,0x30,0x0C,0x60,0x0C,0x60,0x06,0xC0,0x07,0xC0,0x07,0x80,0x01,0x80,0x03,0x80,0x03,0x00,0x03,0x00,0x3E,0x00,0x3E,0x00, // y -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x38,0x00,0x30,0x00,0x60,0x00,0xC0,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x1C,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // z -0x00,0x00,0x00,0xF8,0x01,0xF8,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x1F,0x00,0x1F,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0xF8,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // { -0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // | -0x00,0x00,0x1F,0x00,0x1F,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0xF8,0x00,0xF8,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x1F,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // } -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x8C,0x1F,0xFC,0x18,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ -}; diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/fonts/arial_bold.fon b/MicroPython_BUILD/components/internalfs_image/image_go/fonts/arial_bold.fon deleted file mode 100644 index 9cf4ee62d4586b0ef8983799306f88f400e740e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3052 zcmWd-P>5$B0x&b6Lk6%2Oe<9QB$P}bv__&@M}fXhE%|G;O!V8Hl*@c}~tg8`2L zs`(&Y3=bF|fYV6=PXbsk$jwj#*dMSzU}NB6;0MJs7X8c**gvot@G$Tm;D`Ey%>dc` zQ1cEjKz+{)j&WwF=?n}Y|3mx^vI)jQ_#Z5v021dbVE@3pfx&<$f&T$JJbV}!Kp_G* z4vhyA$0Far08if_6$}at510?|GsrOTGcX@uc)*|l7KIb?ALPN|38Uc>PzDDB9|L;> zD0~?ous85Aa6rXD6v+L2p!g{O#SX+R5E3NIet^e7xI+Ae&Iu6Izo7O&fP+JT9VwN8 z(l*-x5Cr8i{s;0OBn%`B3?x9hL0BFtB4Ge#Nq~U-2YI*&%n$fK@L0$QNH9R4i~x@X z{|7`mmOlVC5u^=<4dg$_!^4;V2mcQq1`tGLf$RohQ2c^qc^LQ~@IQdCKqN>GgxNvv zv#<~VB~XJO20tt$BrN2AAbbe3R6;`jhx`u&52P1_L1BdrgXF*%Y%l|yL{Hxm5)uXy z2@(e+8>A1&9gsQ5;8FNgYqYz1&;(j1N#HU4-6JO5_}fy z$npO}{s+GB1%(wVma*XffQUZ>Q1}{17=ThI-vdxO1*KSKX!*^+V0a7!rE_4A&jJEr z?vpT(Dd0(9I{>P4Ky?w@0iFbz0to}Syo8Jej{&HTV}_O>5ZA)w!DTwQ>;siBpwfkn z0hCf9^2`UA4}i*J4154q!hmETCNeg_%4r68`3KSu7X{ZL5FS{Z0aW&YSRmK2CGf!A z46z#@`Tzg_{}6ewtq>+o5>m%9K45>q2P&Z-uy24Vg``?U*$Ybj{115Hxfh}iTm~gT z)bb@Dm(GxU!@Pn01FQ~$ma-6yP!bd`pi&olzG7afIUGXLH+?h*o_c3@jl@H04gIvr91?~%m;-qs4W1CAs9_ap0R%6L=2rHt;v_AK*K{a{!c5Vfta_q0=yV2yJd*|Htx-VGjaA#9<^p_k+}c!yj75 zqt(73X{5Rn7Jra%0ZW3~9hmV0Des^Pm`CtgZ+pe>*##u24+N_FJLHu;4|Y5932 E0Kq-+S^xk5 diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/fonts/swiss721_outline.fon b/MicroPython_BUILD/components/internalfs_image/image_go/fonts/swiss721_outline.fon deleted file mode 100644 index 2ece05ef63436c997aee354d7abc0ae837e566ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3052 zcmWd-P>5$B0x&l)K_N2(GXo<70|Q8exdEn?$pHpoBB(Uu1V#l$1ttgiA50D`4fY>c z8aNp^83YlE9xyN9QQ-c-wSZNDc>==*whx>aSOl0iFf3qr08(UOa4cb0!mb0y8>||b zE!d86?c&)ba!kSkBnQIm4Lk?99k?Ah8(0}QEyON}Du@S2oZzXv6`= z2BrpP239y^W?*VyY+yJ5QOCo;1(tz@0aF7=B^Lt^M4Ewtf$;#N1E+_036BJm0_y}W z4>kk16oTQv0EPVjU@Qg)gfxuBd;k=d%npdqg~@s^?kdK+6+L;fqDDZCJ3P3>K4J-=G2opfM9QYhK9QYj= z5fCm9($77CFMuI{VF9B9D110Sa0u{!fEv%he1OG(`vOk@;{!$o#tRGqd;#1OP|UYs zP+**?a}o z2V4x?54aRKFMxc(ief%L$Tb%j7Jys_az7*{kwW+bGY``jrYTHc7$ulen5HmIVM;+a zpA#HDoD*0Am@hB{urGkQAM7UuMtF=6$zQ+-4?UPK88{dUm>YN)BpBEk7!EMNQ#V|m zLH-Ab4Ix1+RLlX=_kclyfrp`hv4Ias5*$Al_yQOvFeWfHfc%Y`e;F80^Bb|G(;q1;PE5>KtMqJgouWShWG^m z1MwFk8saYmB;?^?!u)_mg7b-x3@B1X7(`@*OgLY#NFdCYKOkTrenG?oWC9pxfXtDH zhY3 zMVu(XLu7)ef|!FugP?=Bg2)7s01*vD`0+7-+>4As{zT*-8ygiDqY$kSttnbl zbie3^=z`gnbD*{}$XEzz2x&-ah-!$f5L+RdA+kcGL&O8&e)b0(0>UR$R5U=|644M* zQ4v1DA;1ogAN~g%0^BFKG`KXlPjCouKY+LdDg03NKT+urKEa{FeuIGn;sTWTR}jAe zu?As3^8*$E?iXAZTnwxam?apV@QH9gVUb{l=U-6#@mGLyCJKhfKO%l0CW~cA-{3Jo zxZlD;BS0lUBtT?=&;o7+ZUO6> zwa^bPc=`mF*$-g4;PeAnInKlYs#PI%4r2qO1E`b+m)8jl;Ch7p0E+`VqSS@5*d16L z*dZZwfKh=-fQ5sD1>##$$p8Nt7#Ke=OEA4)TEX;!S%MKBC+McIKVTDJyuf~eCxH6` z_XM5*c6jcCrrrnK0-WG9#HGP|f=hrOp1L3=fyyAx3tRc8E48 z$^L;OKp2$k0z?9YCvXI?UtkE}pTMC23PGs*KX6O%LfsF_35e7I%Kf0Y2GQ`?LrPts z+83uGfq1&Fq{ z(Ku#qrRfEOmghjC2+W7m{SY;vJO~fp6Ue1IM4tZvmjKNFoF};8r2s^hfr0r4iw5Tl zP{?p;aGqe%V15CLH3kj1`~#*1%nHm2xZKZvfJXsTvamj2n!ta711a}H+E2_0ObW~i zpm1Y!U`$|CfVBKzrZX_`SwQRtk(@7hG!W?zqK40c%YZY0HGp*i%K|0^CI?WAKx81K z<;#)*l2zqdNAmSGy&u76Iz`B4*fzg3Ufpr0A0H!?D`~;Q-ObeL6@yy=9 z(g4xTz`*{4g@gSAv;_FU$^m!Z0Y(NGWM<$2x1V8ra0?UGGQ~kNGr-%fpcbhC!vO>z b)_!AP;Ny^-A&>xb3o;!P;1QpepH~6^qXNd2 diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/lib/LoRaReceiver.py b/MicroPython_BUILD/components/internalfs_image/image_go/lib/LoRaReceiver.py deleted file mode 100644 index 981e7fa..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/lib/LoRaReceiver.py +++ /dev/null @@ -1,13 +0,0 @@ -def receive(lora): - print("LoRa Receiver") - - while True: - if lora.receivedPacket(): - lora.blink_led() - payload = lora.read_payload() - - try: - print("*** Received message ***\n{}".format(payload.decode())) - except Exception as e: - print(e) - print("with RSSI: {}\n".format(lora.packetRssi())) \ No newline at end of file diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/lib/LoRaSender.py b/MicroPython_BUILD/components/internalfs_image/image_go/lib/LoRaSender.py deleted file mode 100644 index 028ec76..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/lib/LoRaSender.py +++ /dev/null @@ -1,14 +0,0 @@ -from time import sleep - - -def send(lora): - counter = 0 - print("LoRa Sender") - - while True: - payload = 'Hello ({0})'.format(counter) - print("Sending packet: \n{}\n".format(payload)) - lora.println(payload) - - counter += 1 - sleep(5) \ No newline at end of file diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/lib/bme280.py b/MicroPython_BUILD/components/internalfs_image/image_go/lib/bme280.py deleted file mode 100644 index c8d67ba..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/lib/bme280.py +++ /dev/null @@ -1,206 +0,0 @@ -# Authors: Paul Cunnane 2016, Peter Dahlebrg 2016 -# -# This module borrows from the Adafruit BME280 Python library. Original -# Copyright notices are reproduced below. -# -# Those libraries were written for the Raspberry Pi. This modification is -# intended for the MicroPython and esp8266 boards. -# -# Copyright (c) 2014 Adafruit Industries -# Author: Tony DiCola -# -# Based on the BMP280 driver with BME280 changes provided by -# David J Taylor, Edinburgh (www.satsignal.eu) -# -# Based on Adafruit_I2C.py created by Kevin Townsend. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -import time -from ustruct import unpack, unpack_from -from array import array - -# BME280 default address. -BME280_I2CADDR = 0x76 - -# Operating Modes -BME280_OSAMPLE_1 = 1 -BME280_OSAMPLE_2 = 2 -BME280_OSAMPLE_4 = 3 -BME280_OSAMPLE_8 = 4 -BME280_OSAMPLE_16 = 5 - -BME280_REGISTER_CONTROL_HUM = 0xF2 -BME280_REGISTER_CONTROL = 0xF4 - - -class BME280: - - def __init__(self, - mode=BME280_OSAMPLE_1, - address=BME280_I2CADDR, - i2c=None, - **kwargs): - # Check that mode is valid. - if mode not in [BME280_OSAMPLE_1, BME280_OSAMPLE_2, BME280_OSAMPLE_4, - BME280_OSAMPLE_8, BME280_OSAMPLE_16]: - raise ValueError( - 'Unexpected mode value {0}. Set mode to one of ' - 'BME280_ULTRALOWPOWER, BME280_STANDARD, BME280_HIGHRES, or ' - 'BME280_ULTRAHIGHRES'.format(mode)) - self._mode = mode - self.address = address - if i2c is None: - raise ValueError('An I2C object is required.') - self.i2c = i2c - - # load calibration data - dig_88_a1 = self.i2c.readfrom_mem(self.address, 0x88, 26) - dig_e1_e7 = self.i2c.readfrom_mem(self.address, 0xE1, 7) - self.dig_T1, self.dig_T2, self.dig_T3, self.dig_P1, \ - self.dig_P2, self.dig_P3, self.dig_P4, self.dig_P5, \ - self.dig_P6, self.dig_P7, self.dig_P8, self.dig_P9, \ - _, self.dig_H1 = unpack("> 4) - - self.dig_H6 = unpack_from("> 4 - raw_press = ((readout[0] << 16) | (readout[1] << 8) | readout[2]) >> 4 - # temperature(0xFA): ((msb << 16) | (lsb << 8) | xlsb) >> 4 - raw_temp = ((readout[3] << 16) | (readout[4] << 8) | readout[5]) >> 4 - # humidity(0xFD): (msb << 8) | lsb - raw_hum = (readout[6] << 8) | readout[7] - - result[0] = raw_temp - result[1] = raw_press - result[2] = raw_hum - - def read_compensated_data(self, result=None): - """ Reads the data from the sensor and returns the compensated data. - - Args: - result: array of length 3 or alike where the result will be - stored, in temperature, pressure, humidity order. You may use - this to read out the sensor without allocating heap memory - - Returns: - array with temperature, pressure, humidity. Will be the one from - the result parameter if not None - """ - self.read_raw_data(self._l3_resultarray) - raw_temp, raw_press, raw_hum = self._l3_resultarray - # temperature - var1 = ((raw_temp >> 3) - (self.dig_T1 << 1)) * (self.dig_T2 >> 11) - var2 = (((((raw_temp >> 4) - self.dig_T1) * - ((raw_temp >> 4) - self.dig_T1)) >> 12) * self.dig_T3) >> 14 - self.t_fine = var1 + var2 - temp = (self.t_fine * 5 + 128) >> 8 - - # pressure - var1 = self.t_fine - 128000 - var2 = var1 * var1 * self.dig_P6 - var2 = var2 + ((var1 * self.dig_P5) << 17) - var2 = var2 + (self.dig_P4 << 35) - var1 = (((var1 * var1 * self.dig_P3) >> 8) + - ((var1 * self.dig_P2) << 12)) - var1 = (((1 << 47) + var1) * self.dig_P1) >> 33 - if var1 == 0: - pressure = 0 - else: - p = 1048576 - raw_press - p = (((p << 31) - var2) * 3125) // var1 - var1 = (self.dig_P9 * (p >> 13) * (p >> 13)) >> 25 - var2 = (self.dig_P8 * p) >> 19 - pressure = ((p + var1 + var2) >> 8) + (self.dig_P7 << 4) - - # humidity - h = self.t_fine - 76800 - h = (((((raw_hum << 14) - (self.dig_H4 << 20) - - (self.dig_H5 * h)) + 16384) - >> 15) * (((((((h * self.dig_H6) >> 10) * - (((h * self.dig_H3) >> 11) + 32768)) >> 10) + - 2097152) * self.dig_H2 + 8192) >> 14)) - h = h - (((((h >> 15) * (h >> 15)) >> 7) * self.dig_H1) >> 4) - h = 0 if h < 0 else h - h = 419430400 if h > 419430400 else h - humidity = h >> 12 - - if result: - result[0] = temp - result[1] = pressure - result[2] = humidity - return result - - return array("i", (temp, pressure, humidity)) - - @property - def values(self): - """ human readable values """ - - t, p, h = self.read_compensated_data() - - p = p // 256 - pi = p // 100 - pd = p - pi * 100 - - hi = h // 1024 - hd = h * 100 // 1024 - hi * 100 - return ("{}C".format(t / 100), "{}.{:02d}hPa".format(pi, pd), - "{}.{:02d}%".format(hi, hd)) diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/lib/config_lora.py b/MicroPython_BUILD/components/internalfs_image/image_go/lib/config_lora.py deleted file mode 100644 index 6102814..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/lib/config_lora.py +++ /dev/null @@ -1,30 +0,0 @@ -import sys -import os -import time - - -def mac2eui(mac): - mac = mac[0:6] + 'fffe' + mac[6:] - return hex(int(mac[0:2], 16) ^ 2)[2:] + mac[2:] - - -# Node Name -from machine import unique_id -import ubinascii -unique_id = ubinascii.hexlify(unique_id()).decode() - -NODE_NAME = 'ESP32_' - -NODE_EUI = mac2eui(unique_id) -NODE_NAME = NODE_NAME + unique_id -# NODE_NAME = NODE_NAME + NODE_EUI - -# millisecond -millisecond = time.ticks_ms -# microsecond = time.ticks_us - - -# Controller -from controller_esp import Controller - - diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/lib/controller.py b/MicroPython_BUILD/components/internalfs_image/image_go/lib/controller.py deleted file mode 100644 index 27537d9..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/lib/controller.py +++ /dev/null @@ -1,122 +0,0 @@ -from time import sleep - - -class Controller: - - class Mock: - pass - - - ON_BOARD_LED_PIN_NO = None - ON_BOARD_LED_HIGH_IS_ON = True - GPIO_PINS = [] - - PIN_ID_FOR_LORA_RESET = None - - PIN_ID_SCK = None - PIN_ID_MOSI = None - PIN_ID_MISO = None - - PIN_ID_FOR_LORA_SS = None - PIN_ID_FOR_LORA_DIO0 = None - PIN_ID_FOR_LORA_DIO1 = None - PIN_ID_FOR_LORA_DIO2 = None - PIN_ID_FOR_LORA_DIO3 = None - PIN_ID_FOR_LORA_DIO4 = None - PIN_ID_FOR_LORA_DIO5 = None - - spi = None - - def __init__(self, - spi = spi, - pin_id_led = ON_BOARD_LED_PIN_NO, - on_board_led_high_is_on = ON_BOARD_LED_HIGH_IS_ON, - pin_id_reset = PIN_ID_FOR_LORA_RESET, - blink_on_start = (2, 0.5, 0.5)): - - self.pin_led = self.prepare_pin(pin_id_led) - self.on_board_led_high_is_on = on_board_led_high_is_on - self.pin_reset = self.prepare_pin(pin_id_reset) - self.spi = self.prepare_spi(spi) - self.reset_transceivers() - self.transceivers = {} - self.blink_led(*blink_on_start) - - - def add_transceiver(self, - transceiver, - pin_id_ss = PIN_ID_FOR_LORA_SS, - pin_id_RxDone = PIN_ID_FOR_LORA_DIO0, - pin_id_RxTimeout = PIN_ID_FOR_LORA_DIO1, - pin_id_ValidHeader = PIN_ID_FOR_LORA_DIO2, - pin_id_CadDone = PIN_ID_FOR_LORA_DIO3, - pin_id_CadDetected = PIN_ID_FOR_LORA_DIO4, - pin_id_PayloadCrcError = PIN_ID_FOR_LORA_DIO5): - - transceiver.transfer = self.spi.transfer - transceiver.blink_led = self.blink_led - - transceiver.pin_ss = self.prepare_pin(pin_id_ss) - transceiver.pin_RxDone = self.prepare_irq_pin(pin_id_RxDone) - transceiver.pin_RxTimeout = self.prepare_irq_pin(pin_id_RxTimeout) - transceiver.pin_ValidHeader = self.prepare_irq_pin(pin_id_ValidHeader) - transceiver.pin_CadDone = self.prepare_irq_pin(pin_id_CadDone) - transceiver.pin_CadDetected = self.prepare_irq_pin(pin_id_CadDetected) - transceiver.pin_PayloadCrcError = self.prepare_irq_pin(pin_id_PayloadCrcError) - - transceiver.init() - - self.transceivers[transceiver.name] = transceiver - return transceiver - - - def prepare_pin(self, pin_id, in_out = None): - reason = ''' - # a pin should provide: - # .low() - # .high() - # .value() # read input. - # .irq() # ref to the irq function of real pin object. - ''' - raise NotImplementedError('reason') - - - def prepare_irq_pin(self, pin_id): - reason = ''' - # a irq_pin should provide: - # .set_handler_for_irq_on_rising_edge() # to set trigger and handler. - # .detach_irq() - ''' - raise NotImplementedError('reason') - - - def prepare_spi(self, spi): - reason = ''' - # a spi should provide: - # .close() - # .transfer(address, value = 0x00) - ''' - raise NotImplementedError('reason') - - - def led_on(self, on = True): - self.pin_led.high() if self.on_board_led_high_is_on == on else self.pin_led.low() - - - def blink_led(self, times = 1, on_seconds = 0.1, off_seconds = 0.1): - for i in range(times): - self.led_on(True) - sleep(on_seconds) - self.led_on(False) - sleep(off_seconds) - - - def reset_transceivers(self, duration_low = 0.01, duration_high = 0.01): - self.pin_reset.low() - sleep(duration_low) - self.pin_reset.high() - sleep(duration_high) - - - def __exit__(self): - self.spi.close() diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/lib/controller_esp.py b/MicroPython_BUILD/components/internalfs_image/image_go/lib/controller_esp.py deleted file mode 100644 index cd868c6..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/lib/controller_esp.py +++ /dev/null @@ -1,163 +0,0 @@ -from machine import Pin, SPI, reset -import config_lora -import controller - - -''' -import time -PIN_ID_FOR_LORA_RESET = 18 -PIN_ID_FOR_LORA_SS = 26 -PIN_ID_SCK = 19 -PIN_ID_MOSI = 23 -PIN_ID_MISO = 25 -PIN_ID_FOR_LORA_DIO0 = 5 -ON_BOARD_LED_PIN_NO = 2 - -#spi = machine.SPI(1, baudrate = 8000000, sck = machine.Pin(PIN_ID_SCK, machine.Pin.OUT), mosi = machine.Pin(PIN_ID_MOSI, machine.Pin.OUT), miso = machine.Pin(PIN_ID_MISO, machine.Pin.IN), cs = machine.Pin(PIN_ID_FOR_LORA_SS, machine.Pin.OUT), duplex=False) -#spi = machine.SPI(1, baudrate = 8000000, sck = machine.Pin(PIN_ID_SCK, machine.Pin.OUT), mosi = machine.Pin(PIN_ID_MOSI, machine.Pin.OUT), miso = machine.Pin(PIN_ID_MISO, machine.Pin.IN), duplex=False) -spi = machine.SPI(1, baudrate = 8000000, sck = machine.Pin(PIN_ID_SCK, machine.Pin.OUT), mosi = machine.Pin(PIN_ID_MOSI, machine.Pin.OUT), miso = machine.Pin(PIN_ID_MISO, machine.Pin.IN)) - -dio=machine.Pin(PIN_ID_FOR_LORA_DIO0, machine.Pin.IN) -cs=machine.Pin(PIN_ID_FOR_LORA_SS, machine.Pin.OUT) -rst=machine.Pin(PIN_ID_FOR_LORA_RESET, machine.Pin.OUT) -rst.value(0) -response = bytearray(4) - -def xrst(): - rst.value(0) - time.sleep_ms(100) - rst.value(1) - -xrst() - -def xrd(reg): - cs.value(0) - spi.write_readinto(bytes([reg]), response); - cs.value(1) - print(response) - -def yrd(reg): - cs.value(0) - spi.write(bytes([reg])); - spi.readinto(response) - cs.value(1) - print(response) - -def zrd(reg): - cs.value(0) - spi.write(bytes([reg])); - spi.write_readinto(bytes([0]),response) - cs.value(1) - print(response) - -def wrd(reg): - cs.value(0) - res = spi.readfrom_mem(reg,4) - cs.value(1) - print(res) - -''' - -class Controller(controller.Controller): - - PIN_ID_FOR_LORA_RESET = 18 - - PIN_ID_FOR_LORA_SS = 26 - PIN_ID_SCK = 19 - PIN_ID_MOSI = 23 - PIN_ID_MISO = 25 - - PIN_ID_FOR_LORA_DIO0 = 5 - PIN_ID_FOR_LORA_DIO1 = None - PIN_ID_FOR_LORA_DIO2 = None - PIN_ID_FOR_LORA_DIO3 = None - PIN_ID_FOR_LORA_DIO4 = None - PIN_ID_FOR_LORA_DIO5 = None - - spi = None - - ON_BOARD_LED_PIN_NO = 2 - ON_BOARD_LED_HIGH_IS_ON = True - GPIO_PINS = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, - 23, 25, 26, 27, 32, 34, 35, 36, 37, 38, 39) - try: - if not spi: - spi = SPI(1, baudrate = 5000000, polarity = 0, phase = 0, bits = 8, firstbit = SPI.MSB, - sck = Pin(PIN_ID_SCK, Pin.OUT), - mosi = Pin(PIN_ID_MOSI, Pin.OUT), - miso = Pin(PIN_ID_MISO, Pin.IN)) - #spi.init() - print(spi) - - except Exception as e: - print(e) - if spi: - spi.deinit() - spi = None - reset() # in case SPI is already in use, need to reset. - - - def __init__(self, - spi = spi, - pin_id_led = ON_BOARD_LED_PIN_NO, - on_board_led_high_is_on = ON_BOARD_LED_HIGH_IS_ON, - pin_id_reset = PIN_ID_FOR_LORA_RESET, - blink_on_start = (2, 0.5, 0.5)): - - super().__init__(spi, - pin_id_led, - on_board_led_high_is_on, - pin_id_reset, - blink_on_start) - - - def prepare_pin(self, pin_id, in_out = Pin.OUT): - if pin_id is not None: - pin = Pin(pin_id, in_out) - new_pin = Controller.Mock() - new_pin.pin_id = pin_id - new_pin.value = pin.value - - if in_out == Pin.OUT: - new_pin.low = lambda : pin.value(0) - new_pin.high = lambda : pin.value(1) - else: - new_pin.irq = pin.irq - - return new_pin - - - def prepare_irq_pin(self, pin_id): - pin = self.prepare_pin(pin_id, Pin.IN) - if pin: - pin.set_handler_for_irq_on_rising_edge = lambda handler: pin.irq(handler = handler, trigger = Pin.IRQ_RISING) - pin.detach_irq = lambda : pin.irq(handler = None, trigger = 0) - return pin - - - def prepare_spi(self, spi): - if spi: - new_spi = Controller.Mock() - - def transfer(pin_ss, address, value = 0x00): - response = bytearray(1) - - pin_ss.low() - - spi.write(bytes([address])) # write register address - spi.write_readinto(bytes([value]), response) # write or read register walue - #spi.write_readinto(bytes([address]), response) - - pin_ss.high() - - return response - - new_spi.transfer = transfer - new_spi.close = spi.deinit - return new_spi - - - def __exit__(self): - self.spi.close() - diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/lib/led.py b/MicroPython_BUILD/components/internalfs_image/image_go/lib/led.py deleted file mode 100644 index 17e7b61..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/lib/led.py +++ /dev/null @@ -1,11 +0,0 @@ -# coding: utf-8 - -import time - - -def blink(pin, times = 1, on_seconds = 0.1, off_seconds = 0.1, high_is_on = True): - for i in range(times): - pin.high() if high_is_on else pin.low() - time.sleep(on_seconds) - pin.low() if high_is_on else pin.high() - time.sleep(off_seconds) \ No newline at end of file diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/lib/sx127x.py b/MicroPython_BUILD/components/internalfs_image/image_go/lib/sx127x.py deleted file mode 100644 index 4b4aa22..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/lib/sx127x.py +++ /dev/null @@ -1,389 +0,0 @@ -from time import sleep -import time -import gc -import config_lora - - -PA_OUTPUT_RFO_PIN = 0 -PA_OUTPUT_PA_BOOST_PIN = 1 - - -# registers -REG_FIFO = 0x00 -REG_OP_MODE = 0x01 -REG_FRF_MSB = 0x06 -REG_FRF_MID = 0x07 -REG_FRF_LSB = 0x08 -REG_PA_CONFIG = 0x09 -REG_LNA = 0x0c -REG_FIFO_ADDR_PTR = 0x0d - -REG_FIFO_TX_BASE_ADDR = 0x0e -FifoTxBaseAddr = 0x00 -# FifoTxBaseAddr = 0x80 - -REG_FIFO_RX_BASE_ADDR = 0x0f -FifoRxBaseAddr = 0x00 -REG_FIFO_RX_CURRENT_ADDR = 0x10 -REG_IRQ_FLAGS_MASK = 0x11 -REG_IRQ_FLAGS = 0x12 -REG_RX_NB_BYTES = 0x13 -REG_PKT_RSSI_VALUE = 0x1a -REG_PKT_SNR_VALUE = 0x1b -REG_MODEM_CONFIG_1 = 0x1d -REG_MODEM_CONFIG_2 = 0x1e -REG_PREAMBLE_MSB = 0x20 -REG_PREAMBLE_LSB = 0x21 -REG_PAYLOAD_LENGTH = 0x22 -REG_FIFO_RX_BYTE_ADDR = 0x25 -REG_MODEM_CONFIG_3 = 0x26 -REG_RSSI_WIDEBAND = 0x2c -REG_DETECTION_OPTIMIZE = 0x31 -REG_DETECTION_THRESHOLD = 0x37 -REG_SYNC_WORD = 0x39 -REG_DIO_MAPPING_1 = 0x40 -REG_VERSION = 0x42 - -# modes -MODE_LONG_RANGE_MODE = 0x80 # bit 7: 1 => LoRa mode -MODE_SLEEP = 0x00 -MODE_STDBY = 0x01 -MODE_TX = 0x03 -MODE_RX_CONTINUOUS = 0x05 -MODE_RX_SINGLE = 0x06 - -# PA config -PA_BOOST = 0x80 - -# IRQ masks -IRQ_TX_DONE_MASK = 0x08 -IRQ_PAYLOAD_CRC_ERROR_MASK = 0x20 -IRQ_RX_DONE_MASK = 0x40 -IRQ_RX_TIME_OUT_MASK = 0x80 - -# Buffer size -MAX_PKT_LENGTH = 255 - - -class SX127x: - - # The controller needs to provide an interface consisted of: - # 1. a SPI, with transfer function. - # 2. a reset pin, with low(), high() functions. - # 3. IRQ pinS , to be triggered by RFM96W's DIO0~5 pins. These pins each has two functions: - # 3.1 set_handler_for_irq_on_rising_edge() - # 3.2 detach_irq() - # 4. a function to blink on-board LED. - - def __init__(self, - name = 'SX127x', - parameters = {'frequency': 868E6, 'tx_power_level': 2, 'signal_bandwidth': 125E3, - 'spreading_factor': 8, 'coding_rate': 5, 'preamble_length': 8, - 'implicitHeader': False, 'sync_word': 0x12, 'enable_CRC': False}, - onReceive = None): - - self.name = name - self.parameters = parameters - self._onReceive = onReceive - self._lock = False - - - def init(self): - # check version - version = self.readRegister(REG_VERSION) - if version != 0x12: - print("Detected version:", version) - raise Exception('Invalid version.') - - - # put in LoRa and sleep mode - self.sleep() - - - # config - self.setFrequency(self.parameters['frequency']) - self.setSignalBandwidth(self.parameters['signal_bandwidth']) - - # set LNA boost - self.writeRegister(REG_LNA, self.readRegister(REG_LNA) | 0x03) - - # set auto AGC - self.writeRegister(REG_MODEM_CONFIG_3, 0x04) - - self.setTxPower(self.parameters['tx_power_level']) - self._implicitHeaderMode = None - self.implicitHeaderMode(self.parameters['implicitHeader']) - self.setSpreadingFactor(self.parameters['spreading_factor']) - self.setCodingRate(self.parameters['coding_rate']) - self.setPreambleLength(self.parameters['preamble_length']) - self.setSyncWord(self.parameters['sync_word']) - self.enableCRC(self.parameters['enable_CRC']) - - # set base addresses - self.writeRegister(REG_FIFO_TX_BASE_ADDR, FifoTxBaseAddr) - self.writeRegister(REG_FIFO_RX_BASE_ADDR, FifoRxBaseAddr) - - self.standby() - - - def beginPacket(self, implicitHeaderMode = False): - self.standby() - self.implicitHeaderMode(implicitHeaderMode) - - # reset FIFO address and paload length - self.writeRegister(REG_FIFO_ADDR_PTR, FifoTxBaseAddr) - self.writeRegister(REG_PAYLOAD_LENGTH, 0) - - - def endPacket(self): - # put in TX mode - self.writeRegister(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_TX) - - # wait for TX done, standby automatically on TX_DONE - tmo = 0 - freg = self.readRegister(REG_IRQ_FLAGS) - while (freg & IRQ_TX_DONE_MASK) == 0: - time.sleep_ms(10) - tmo += 1 - if tmo > 20: - break - freg = self.readRegister(REG_IRQ_FLAGS) - pass - - # clear IRQ's - self.writeRegister(REG_IRQ_FLAGS, IRQ_TX_DONE_MASK) - - if tmo >= 20: - print("Send timeout.") - - self.collect_garbage() - - - def write(self, buffer): - currentLength = self.readRegister(REG_PAYLOAD_LENGTH) - size = len(buffer) - - # check size - size = min(size, (MAX_PKT_LENGTH - FifoTxBaseAddr - currentLength)) - - # write data - for i in range(size): - self.writeRegister(REG_FIFO, buffer[i]) - - # update length - self.writeRegister(REG_PAYLOAD_LENGTH, currentLength + size) - return size - - - def aquire_lock(self, lock = False): - pass - - - def println(self, string, implicitHeader = False): - self.aquire_lock(True) # wait until RX_Done, lock and begin writing. - - self.beginPacket(implicitHeader) - self.write(string.encode()) - self.endPacket() - - self.aquire_lock(False) # unlock when done writing - - - def getIrqFlags(self): - irqFlags = self.readRegister(REG_IRQ_FLAGS) - self.writeRegister(REG_IRQ_FLAGS, irqFlags) - return irqFlags - - - def packetRssi(self): - return (self.readRegister(REG_PKT_RSSI_VALUE) - (164 if self._frequency < 868E6 else 157)) - - - def packetSnr(self): - return (self.readRegister(REG_PKT_SNR_VALUE)) * 0.25 - - - def standby(self): - self.writeRegister(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_STDBY) - - - def sleep(self): - self.writeRegister(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_SLEEP) - - - def setTxPower(self, level, outputPin = PA_OUTPUT_PA_BOOST_PIN): - if (outputPin == PA_OUTPUT_RFO_PIN): - # RFO - level = min(max(level, 0), 14) - self.writeRegister(REG_PA_CONFIG, 0x70 | level) - - else: - # PA BOOST - level = min(max(level, 2), 17) - self.writeRegister(REG_PA_CONFIG, PA_BOOST | (level - 2)) - - - def setFrequency(self, frequency): - self._frequency = frequency - - frfs = {169E6: (42, 64, 0), - 433E6: (108, 64, 0), - 434E6: (108, 128, 0), - 866E6: (216, 128, 0), - 868E6: (217, 0, 0), - 915E6: (228, 192, 0)} - - self.writeRegister(REG_FRF_MSB, frfs[frequency][0]) - self.writeRegister(REG_FRF_MID, frfs[frequency][1]) - self.writeRegister(REG_FRF_LSB, frfs[frequency][2]) - - - def setSpreadingFactor(self, sf): - sf = min(max(sf, 6), 12) - self.writeRegister(REG_DETECTION_OPTIMIZE, 0xc5 if sf == 6 else 0xc3) - self.writeRegister(REG_DETECTION_THRESHOLD, 0x0c if sf == 6 else 0x0a) - self.writeRegister(REG_MODEM_CONFIG_2, (self.readRegister(REG_MODEM_CONFIG_2) & 0x0f) | ((sf << 4) & 0xf0)) - - - def setSignalBandwidth(self, sbw): - bins = (7.8E3, 10.4E3, 15.6E3, 20.8E3, 31.25E3, 41.7E3, 62.5E3, 125E3, 250E3) - - bw = 9 - for i in range(len(bins)): - if sbw <= bins[i]: - bw = i - break - - self.writeRegister(REG_MODEM_CONFIG_1, (self.readRegister(REG_MODEM_CONFIG_1) & 0x0f) | (bw << 4)) - - - def setCodingRate(self, denominator): - denominator = min(max(denominator, 5), 8) - cr = denominator - 4 - self.writeRegister(REG_MODEM_CONFIG_1, (self.readRegister(REG_MODEM_CONFIG_1) & 0xf1) | (cr << 1)) - - - def setPreambleLength(self, length): - self.writeRegister(REG_PREAMBLE_MSB, (length >> 8) & 0xff) - self.writeRegister(REG_PREAMBLE_LSB, (length >> 0) & 0xff) - - - def enableCRC(self, enable_CRC = False): - modem_config_2 = self.readRegister(REG_MODEM_CONFIG_2) - config = modem_config_2 | 0x04 if enable_CRC else modem_config_2 & 0xfb - self.writeRegister(REG_MODEM_CONFIG_2, config) - - - def setSyncWord(self, sw): - self.writeRegister(REG_SYNC_WORD, sw) - - - # def enable_Rx_Done_IRQ(self, enable = True): - # if enable: - # self.writeRegister(REG_IRQ_FLAGS_MASK, self.readRegister(REG_IRQ_FLAGS_MASK) & ~IRQ_RX_DONE_MASK) - # else: - # self.writeRegister(REG_IRQ_FLAGS_MASK, self.readRegister(REG_IRQ_FLAGS_MASK) | IRQ_RX_DONE_MASK) - - - def dumpRegisters(self): - for i in range(128): - print("0x{0:02x}: {1:02x}".format(i, self.readRegister(i))) - - - def implicitHeaderMode(self, implicitHeaderMode = False): - if self._implicitHeaderMode != implicitHeaderMode: # set value only if different. - self._implicitHeaderMode = implicitHeaderMode - modem_config_1 = self.readRegister(REG_MODEM_CONFIG_1) - config = modem_config_1 | 0x01 if implicitHeaderMode else modem_config_1 & 0xfe - self.writeRegister(REG_MODEM_CONFIG_1, config) - - - def onReceive(self, callback): - self._onReceive = callback - - if self.pin_RxDone: - if callback: - self.writeRegister(REG_DIO_MAPPING_1, 0x00) - self.pin_RxDone.set_handler_for_irq_on_rising_edge(handler = self.handleOnReceive) - else: - self.pin_RxDone.detach_irq() - - - def receive(self, size = 0): - self.implicitHeaderMode(size > 0) - if size > 0: self.writeRegister(REG_PAYLOAD_LENGTH, size & 0xff) - - # The last packet always starts at FIFO_RX_CURRENT_ADDR - # no need to reset FIFO_ADDR_PTR - self.writeRegister(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_RX_CONTINUOUS) - - - # on RPi, interrupt callback is threaded and racing with main thread, - # Needs a lock for accessing FIFO. - # https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/ - # http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio-part-2 - def handleOnReceive(self, event_source): - self.aquire_lock(True) # lock until TX_Done - - # irqFlags = self.getIrqFlags() should be 0x50 - if (self.getIrqFlags() & IRQ_PAYLOAD_CRC_ERROR_MASK) == 0: - if self._onReceive: - payload = self.read_payload() - self.aquire_lock(False) # unlock when done reading - - self._onReceive(self, payload) - - self.aquire_lock(False) # unlock in any case. - - - def receivedPacket(self, size = 0): - irqFlags = self.getIrqFlags() - - self.implicitHeaderMode(size > 0) - if size > 0: self.writeRegister(REG_PAYLOAD_LENGTH, size & 0xff) - - # if (irqFlags & IRQ_RX_DONE_MASK) and \ - # (irqFlags & IRQ_RX_TIME_OUT_MASK == 0) and \ - # (irqFlags & IRQ_PAYLOAD_CRC_ERROR_MASK == 0): - - if (irqFlags == IRQ_RX_DONE_MASK): # RX_DONE only, irqFlags should be 0x40 - # automatically standby when RX_DONE - return True - - elif self.readRegister(REG_OP_MODE) != (MODE_LONG_RANGE_MODE | MODE_RX_SINGLE): - # no packet received. - # reset FIFO address / # enter single RX mode - self.writeRegister(REG_FIFO_ADDR_PTR, FifoRxBaseAddr) - self.writeRegister(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_RX_SINGLE) - - - def read_payload(self): - # set FIFO address to current RX address - # fifo_rx_current_addr = self.readRegister(REG_FIFO_RX_CURRENT_ADDR) - self.writeRegister(REG_FIFO_ADDR_PTR, self.readRegister(REG_FIFO_RX_CURRENT_ADDR)) - - # read packet length - packetLength = self.readRegister(REG_PAYLOAD_LENGTH) if self._implicitHeaderMode else \ - self.readRegister(REG_RX_NB_BYTES) - - payload = bytearray() - for i in range(packetLength): - payload.append(self.readRegister(REG_FIFO)) - - self.collect_garbage() - return bytes(payload) - - - def readRegister(self, address, byteorder = 'big', signed = False): - response = self.transfer(self.pin_ss, address & 0x7f) - return int.from_bytes(response, byteorder) - - - def writeRegister(self, address, value): - self.transfer(self.pin_ss, address | 0x80, value) - - - def collect_garbage(self): - gc.collect() - print('[Memory - free: {} allocated: {}]'.format(gc.mem_free(), gc.mem_alloc())) - diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/main.py b/MicroPython_BUILD/components/internalfs_image/image_go/main.py deleted file mode 100644 index bdd7fd5..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/main.py +++ /dev/null @@ -1,34 +0,0 @@ -import machine, network, utime - -print("") -print("Starting WiFi ...") -sta_if = network.WLAN(network.STA_IF); sta_if.active(True) -sta_if.connect("mySSID", "wifi_password") -tmo = 50 -while not sta_if.isconnected(): - utime.sleep_ms(100) - tmo -= 1 - if tmo == 0: - sta_if.disconnect() - break - -if tmo > 0: - print("WiFi started") - utime.sleep_ms(500) - - rtc = machine.RTC() - print("Synchronize time from NTP server ...") - rtc.ntp_sync(server="hr.pool.ntp.org") - tmo = 100 - while not rtc.synced(): - utime.sleep_ms(100) - tmo -= 1 - if tmo == 0: - break - - if tmo > 0: - print("Time set") - utime.sleep_ms(500) - t = rtc.now() - utime.strftime("%c") - print("") diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/spiffs.info b/MicroPython_BUILD/components/internalfs_image/image_go/spiffs.info deleted file mode 100644 index 68946a2..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/spiffs.info +++ /dev/null @@ -1,11 +0,0 @@ -INTRODUCTION - -Spiffs is a file system intended for SPI NOR flash devices on embedded targets. -Spiffs is designed with following characteristics in mind: - - * Small (embedded) targets, sparse RAM without heap - * Only big areas of data (blocks) can be erased - * An erase will reset all bits in block to ones - * Writing pulls one to zeroes - * Zeroes can only be pulled to ones by erase - * Wear leveling diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/www/favicon.ico b/MicroPython_BUILD/components/internalfs_image/image_go/www/favicon.ico deleted file mode 100644 index 169f21ce9ce4c9d252e175d16f68368cfa7f6c4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7902 zcmZQzU}RurP*4zHU}Runc)`TL5XQj3ARqwYYcMh}*fE3nAaxuJ8LSKpX)Fv33JM^; z0>cUc28MH-FnI-r3>F54GARZI4F(1V1qKEN2L_Nj76yDkNp3ZRuI^R_dxu>NF0OkS ztgH_**f|_waCbk+kPvr?p`_#@LtVpFhB9C#s*7LPsuk0>cA zO<+<|QhNU{NJ&X){~skKB?TrWC9VIPl$4Z|v_X`@A|)jqkc5(w()puGN?JuqO7nk$ zq#?9=kdo5=qY!?~ZzUyFkU@tae4T#~dOtEhG&FSo(NHjm`5hV>)*2c*|7U1u*NV{4 z`M*L#BbJ7S=KKi_UH>~Y^!$;~&?wf>(CGhLL3|Ju8o(MF8utEQ>H6Q{@BgHRh6Zq@ zrKQ#UKfV9op8v;3-(U(9;9vz1egTNj&|Y2+k*@%A8Mw;J%V+N@FE5A27gzv^%fP^} zqAa}&qWJ#@{{R0Q82|rcV5tAYz+nG_fkFNQ0|Wm91_t&63=GU5+`z!V2*VIvxJj5g z5Dn4`!XUFiW`fKH*#WW(WGBdOP&yZYrgc#M!EG`FgO1Kt24}ln4DRmx7_4m%F?e~O zWGF7Wz|c^Cg`ubS7Q_4ncNvx}xzDg>?GuIz7vD3ydHVw?owF+nfx?RolnxUZ7{KXK z6qG!>cQ^_bFbc-rUUN-Qpiuahpx}H%@j$7Af`T#|MFnLV1qCGz3cC2TxVU&6aS8E0 z;yJ}{yG z>IMc)jZF;N+FKa(^tLgWn{8vTw%X2MV7QaP*mw_vvFRQLQ`5Z+<`(-HEG+kf!xvPB zczNvymm{`zhZt<^jxabn9b@qFI>g}Wc8bB*?-YZl=NX28fa44iVMiF^;*K%|1)pRH z4LijU7k8N^D-1n7R~cHGZ!xsC z-ehQRzr)bebB|%-q+1M=r`~3mF!3J4l&SX_X3V+=F0(-Kx_I$@hQ&+nGb~$vpJDlm z#|$f1J!Dw9>IuWzbx#@Au6x0-b?Xy`jhkLF969=i;rNO73@1;$W4L(nJ;Rx^9~drO z`oM7c$_Iw4*FG}bxcQ0U-o4KZkDq*Hc>3%c!^>Ac7~a17$?)mZFNQB)e}l_MCVd75 zmH-9@wgLtQjtLA5TpJh|xX&{%@O@xlQ1~yzVEf;YA^LwHL*@TMh8h1SGHm_7k>Se! zi}3PPM4y2{DS&~&pn!qFb^-%~&jtpD$ny*g=^q#vD*g*Hbp1DEnDal7Vcq{ih6Dd6 zGFLrFel>jt28RF!hNuDthLQ;k41F6I7*?KVU^w)Ff#KqRL53Uu4H@qJ4`g`! zzmVbO|A`Fm|8HdYhNNF#je#M+k%6Hgnt@?L2?N81J_d&KD;XF*9A;qne@T$x{|!Ti z|91l!{y!;X`2T7m!~YK(8UBAmxL;p{fgwPNfuX>FfnkCj1H%Si28Q#|3=AJK85sUo z3NrlfGGzEaH<01~`a*{P2PZQ8zqFCz|5GIW%nS?xEDQ_VaBMj#m9x{Aj_#pV7;gjKihA)Bt8NL<%XZSwxKf}+B{~3N? z{14YJ&7jYq%Mid|&rrY+#4v#&nPCG%8N+#o4u%g5GX?)MEHnJiuqE(6!=b|e4Cg2Q zXSlQRKf`Mz{TvMX;1CdHC}5Cgn82XOuz^91;XH#5!v_XC!T$^qhW{A~1OGGh6#i#e zHt|2h{*C_`ZXxMsP!nKg7Eptg5h_fKV8Emb7Lj3s0~rPe1~nEI77k52J1tHY78W%I z23A&9Szj+J3r{~qR#sL9bv8CZKQneVHg?khAvQJ*advidXLc}fwqj=&=jP&a)#m~O zeRnP{ZeAW9Hv=9p(D&fs;g#m&vv%j_GdAJlceUZ;lhzRymh-a~ac~l`^p_VF)?pA8 z6;<-}_VM-hRTdQ$Wnj=26BCm(^!7256cZEEVPIfTl8}&)aC8BYN?;G@N=ZrC+Dl1E z>4Lco3=Db-Qc?6T>GCI*jRt}!#uyf1 z5pZ)nZmq4c?X!x~+W#s_>!^g+{@2mi_Sw_*gf$i`;X>INm(6uFw|`buUiY6C7-V)* z!Ue41FnQ8FVPk_mkJVJx|5sDlfCsPtZ(*_Re^TPH|7B%o|Cg7a{hyqC?7y}3j{n5y zH8I@tco_2_bSwT=JP)i&V7S=lH5pE>*X|KGp=KphPf{O{kt|Cg`4|6f{m z_P>S(K65tycX2$j7#`>h3=E}3*Q~WQxBb`9*n}0En{WSr;NVLX`|xqjoO}D<-eDJ3 zvp{x$>?$w022Tr)c851>YHt3I4cpl6`hVx{XSj7AKmPhZf5F}VDXAy^yL;^W@8rDa ze`M5=|C1))`2X_dceuJ|&%gb5b=!;8OprZJ_J=ov!l0x5wzPrXuK!wETQIPm-q!!; zFTR7DxqZj8|CW|JG1S5I8k=nYzjpm2xca;IKL0m1-i}qhq5iJ_6Z-B-d%B*;*4Ezo zUq=TM_x4?fo3(P)!~Z(Em};=;Te9>%T;JSzcd?ocveVb|WVXG{q4m0Y+y0|tW0M{K z-@X3{Hs{*)kN*t~w_~V5*8}4l7;gW6_1Xup-f!Rj{I{~+g;lSU!{POIwg(^U>2Lp! zjy|8HQp69dnjbqB2X=dZv2 z&CGXW$YaxkEM{u9>;KQ6f5B!fUG@O0eru}(|Mm6u{5Le(g@HG0dIHw_DHr5CKo0#pv!1EVC((td}fB#$C?Zc4ArUzNf%6i{_P~3q$v2yie ztorS25B+y?Jo4DgeBXa`TvB!kq!o-SsxD*5hen+E-_m{^j3Z-CV#pVlUIgm}5p@k$ zG2}t^IoKb*@8ocFy}9N7|LEAx;o$!dAAfi^eofBrkW9!8Oe+2!hdY(1#_v9LV&-^v;jPnmWXYzBzfxak>+n$GT9 zAYm|`JoPS$-0HQEv>6HJ9`lJgWL(y@9uf*|IXcrdg|JZPyZd94ujQ$9~<`aIsX6pO+@|k;lr>0iy*sGxrl5?;>_IUQphZyZIkQ*}6E}7ff9Q*9zdh$OZ+&>9YK7j&a z=In#t2c?eqGAk(_d%GKCA2tkXk9&EXTI}p} z>c6-5ISgD}dh`E=jW5Btvg#IwJV*~nub2C&#giu9!y4b%>_rzVExKy$>3(Xni}R`f zUS8+^`}&^8i$Q8YYC(F63$DW3xaj7R$_JH`UhXHeJ>5^O_w_#e*vs?Ge@BN?U<_jW z`J8?1>3(`WNDZh>ORV|-4={sfPyU0(vq9t9pz&?cI5%j#8-zjQ-ylq^c`$V#Js=D+ z1B5|lg3Jcl0kZ2q1H*ri-Jo#_#JD-};}l+QN39KXwk_1v*z`nQdBcAY*45nf#87wJ zLU-pQmN0jq)0yd)cufp;ELTxn_g`6I4OR@2Gcnw`EH&vO53>I3jLW>*8e2~g+c(wG z+ACvf+G;yo9;D99c=s}p z8~nVFTZ8&7ni`w_gK%8j(f{w?|NQ^>$=Cm@Rz3W`Z2A5F_wIfE|LN1O|EZ}bz-mD1 zKzjUrPFS0n?pdg?-$UBeP%)4=80&BUf8pZ$|DgT~n6J0}zp3f&$3{ko zHuR-S@BdGnbPH>n7}SQIF!AR9>(@WR<&BN^{5Lh-``_4f4;Wv*^5OsFskgywm>4oW zY4Yv=H*S7{%bS|*`)^}&@QJy_zW*S+V%6jSSFV2iZvkp|S?v2iW7fU@bLQR$%YoWP zmo9zyzjobI2;Ty%_p!a*k%h3fOHlC1|DQkq{=ah7lmE7MhyEWq`sV-1Q}6!U+8+Y9 z1HOFy{XaD96ujNz=x}7Azwaq)8@nU_ZS5gAGyCHIH*bIbfAaL(|5vYn{D1rQ=l`eA zzW;y!{@4H9{7Z0kAU*y*r@-mi#rgPhN2g=|Vc5s_)c*++@BM%N{QLixuYUZWGWGs{ zKmSv3d5}6+m*e2{14=^~X_t5%9gd%HbvyMR86Q9K{{NY?A5g?V@*uV7c_1hAGOvgG zsbwA>Xa0M6odx5y>t6idxalRB4H5&%fz%|$Bho&|eq - - - - - - MicroWebSrv test page - - - - -

MicroWebSrv test page

-

Hello from MicroPython !

-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis eget ligula quis libero mollis dapibus. Suspendisse potenti. Nullam facilisis neque et sem. Proin placerat adipiscing urna. Aenean sollicitudin. Mauris lorem erat, fringilla quis, sagittis a, varius sed, nunc. Pellentesque ligula. Nullam egestas eleifend turpis. Vivamus ac sapien. Sed venenatis, ligula ut scelerisque vehicula, erat tellus euismod ipsum, eget faucibus tortor arcu et lectus. Vivamus vel purus. Fusce dignissim tortor quis diam elementum fermentum. Mauris eleifend lorem vel arcu. Vivamus tempus faucibus lectus. Curabitur volutpat ornare mi. Curabitur ac libero. Sed eu elit ac metus egestas iaculis. -

-
-
-
-
- -

- Download « PDF file » -

-
- - - \ No newline at end of file diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/www/pdf-sample.pdf b/MicroPython_BUILD/components/internalfs_image/image_go/www/pdf-sample.pdf deleted file mode 100644 index f698ff53d41575b222e6778f87f9e9fd8da4f2b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7945 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 Z0S3#ENH3PVYs5iAE1s@?F6*2Ung9(Q3(x=n diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/www/style.css b/MicroPython_BUILD/components/internalfs_image/image_go/www/style.css deleted file mode 100644 index 9a7852e..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/www/style.css +++ /dev/null @@ -1,36 +0,0 @@ -html, body { - margin: 0; - padding: 0; - } -body { - background-color: white; - font-family: Verdana, sans-serif; - font-size: 100%; - } -h1 { - font-size: 200%; - color: navy; - text-align: center; - } -h2 { - font-size: 150%; - color: red; - padding-left: 15px; - } -p,ul,li,td { - color: black; - } -a:link { - color: green; - text-decoration: underline; - } -a:visited { - color: gray; - } -a:hover { - color: red; - text-decoration: none; -} -a:active, a:focus { - color: red; -} \ No newline at end of file diff --git a/MicroPython_BUILD/components/internalfs_image/image_go/www/test.pyhtml b/MicroPython_BUILD/components/internalfs_image/image_go/www/test.pyhtml deleted file mode 100644 index bb98d2c..0000000 --- a/MicroPython_BUILD/components/internalfs_image/image_go/www/test.pyhtml +++ /dev/null @@ -1,34 +0,0 @@ - - - TEST - - -

BEGIN

- {{ py }} - def _testFunction(x) : - return "IN TEST FUNCTION %s" % x - {{ end }} -
- {{ for toto in range(3) }} - This is an HTML test...
- TOTO = {{ toto + 1 }} !
- {{ for toto2 in range(3) }} - TOTO2 = {{ _testFunction(toto2) }} - {{ end }} - Ok good.
- {{ end }} -
- {{ _testFunction(100) }}
-
- {{ if 2+5 < 3 }} - IN IF (1) - {{ elif 10+15 != 25 }} - IN ELIF (2) - {{ elif 10+15 == 25 }} - IN ELIF (3) - {{ else }} - IN ELSE (4) - {{ end }} -

JC :')

- - diff --git a/MicroPython_BUILD/components/internalfs_image/spiffs_image.img b/MicroPython_BUILD/components/internalfs_image/spiffs_image.img deleted file mode 100644 index 0c612e7f37cb478700fadb277df53f1aa5b57d08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048576 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