boot.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. # this should be named site.py
  2. import machine, sys, gc, builtins
  3. # turn off damn pins on nodemcu
  4. if sys.platform=='esp32':
  5. for Pin in (0, 2, 4, 5):
  6. machine.Pin(Pin, mode=machine.Pin.OUT, value=0)
  7. else:
  8. #esp32cam
  9. for Pin in (0, 2, 4, 12, 13, 14, 16 ):
  10. machine.Pin(Pin, mode=machine.Pin.OUT, value=0)
  11. del Pin
  12. import uos as os
  13. if "osdebug" in os.listdir("/"):
  14. # file transfer mode
  15. __import__("esp").osdebug(None)
  16. gc.collect()
  17. with open("free", "wb") as free:
  18. print(gc.mem_free(), file=free)
  19. else:
  20. builtins.__UPY__ = True
  21. #builtins.__ANDROID__ = False
  22. #builtins.__WASM__ = False
  23. def report(free):
  24. global last
  25. gc.collect()
  26. mf = gc.mem_free()
  27. print("free", mf, "on", free, "=", mf - free, "delta", mf - last)
  28. try:
  29. return last - mf
  30. finally:
  31. last = mf
  32. try:
  33. with open("free") as f:
  34. free = int(f.read())
  35. except:
  36. free = 37280
  37. last = free
  38. free -= 192 + 32 + 16
  39. # if b'minitel' in [bytes(str,'utf-8') for str in os.listdir('/')]: #> qstr still cached why ... ?
  40. if "UART" in os.listdir("/"):
  41. os.dupterm(None, 1)
  42. UART = machine.UART(0, 1200)
  43. UART.init(1200, bits=7, parity=0, stop=1)
  44. sys.stdout = UART
  45. sys.stderr = UART
  46. sys.stdin = UART
  47. import webrepl
  48. webrepl.start()
  49. import utime as Time
  50. class config: # COST ~ 192
  51. # FIXME: use gh by default
  52. srv = "http://192.168.1.66/mpy/%s/" % sys.platform
  53. free = free
  54. BPS = 115200
  55. GPIO = {}
  56. aio = False
  57. cache = False
  58. IP = "0.0.0.0"
  59. import network
  60. essid = b"micropython"
  61. password = b""
  62. AP_IF = network.WLAN(network.AP_IF)
  63. STA_IF = network.STA_IF
  64. STA_IF = network.WLAN(network.STA_IF)
  65. def connect(f):
  66. try:
  67. with open(f, "rb") as f:
  68. essid = f.readline().decode().strip()
  69. if not essid:
  70. raise OSError(2)
  71. return essid, f.readline().decode().strip()
  72. except:
  73. print("network", "config", "error")
  74. return b"ap", b""
  75. def isconnected(STA_IF, tmout=10):
  76. # required for weemos knock-off to process dhcp request
  77. while tmout and not STA_IF.isconnected():
  78. Time.sleep(1)
  79. print("", end=".")
  80. if tmout > 0:
  81. tmout -= 1
  82. Time.sleep(.5)
  83. return STA_IF.ifconfig()[0]
  84. if "ap" in os.listdir("/"):
  85. essid, password = connect("ap")
  86. AP_IF.config(essid=essid, authmode=0, password=password, channel=9)
  87. AP_IF.active(True)
  88. AIP = AP_IF.ifconfig()[0]
  89. #if not STA_IF.isconnected():
  90. # IP = AIP
  91. print("AP_IF", AP_IF.active(), AIP, essid, '*' * len(password) )
  92. if "network" in os.listdir("/"):
  93. STA_IF.active(True)
  94. if AP_IF.active():
  95. Time.sleep(1)
  96. try:
  97. STA_IF.disconnect()
  98. except:
  99. pass
  100. essid, password = connect("network")
  101. if not "IP" in os.listdir("/"):
  102. print("connect",essid,password)
  103. try:
  104. STA_IF.disconnect()
  105. STA_IF.active(False)
  106. Time.sleep(.5)
  107. except:
  108. pass
  109. STA_IF.active(True)
  110. STA_IF.connect(essid, password)
  111. IP = isconnected(STA_IF)
  112. if STA_IF.ifconfig()[0][0] != "0":
  113. with open("IP", "w") as f:
  114. print(IP, file=f)
  115. print(IP, Time.localtime())
  116. print("network", "STA_IF", IP)
  117. # turn off network cnx debug
  118. __import__("esp").osdebug(None)
  119. # FIXME: loss connex renew dhcp
  120. del connect, isconnected
  121. network = STA_IF
  122. print("STA_IF", STA_IF.active(), STA_IF.isconnected(), essid, IP)
  123. if "/lib" in sys.path:
  124. sys.path.remove("/lib")
  125. try:
  126. import urequests
  127. except:
  128. sys.path.append('/rom')
  129. import urequests
  130. if "uses" in os.listdir("/"):
  131. # NEED FIX
  132. # sys.modules['__main__'] == __import__(__name__)
  133. # https://github.com/micropython/micropython/issues/4427
  134. import ujson as json
  135. sys.path.append("/xpy/esp")
  136. sys.path.append("/assets") # android runtime folder
  137. setattr(builtins, "sys", sys)
  138. setattr(builtins, "builtins", builtins)
  139. builtins.os = os
  140. import xpy.builtins
  141. del sys.modules["xpy.builtins"]
  142. del config
  143. report(free)
  144. try:
  145. import asyncio
  146. except:
  147. sys.path.append("rom")
  148. import uasyncio as asyncio
  149. print("asyncio", "not", "builtins")
  150. #print("xpy.aio")
  151. #import xpy.aio
  152. print("klib")
  153. export("klib", dlopen("klib"))
  154. builtins.Pin = klib.Pin
  155. #export("drv", dlopen("drv"))
  156. report(free)
  157. import uio as io
  158. builtins.io = io
  159. else:
  160. print("No framework")
  161. setattr(builtins, "uses", None)
  162. setattr(builtins, "use", config)
  163. #from lib import *
  164. #from drv import *
  165. setattr(builtins, "pdb", print)
  166. globals()["lib"] = __import__(__name__)
  167. globals()["drv"] = __import__(__name__)
  168. report(free)
  169. # uasyncio 3632 - 3700
  170. # asyncio 2736
  171. # xpy.aio 1952
  172. #