15:30でテレワークあがりです。
本日で待機日、10日目です。
日本到着後の検疫で行われる抗原検査(唾液)の結果が、陰性であっても搭乗地によって、3日、6日、10日の停留が義務づけられています。
最近は入国者が増えて、停留施設に移動する前に空港内で待機する時間が掛かったり、停留地まで再び飛行機で移動したり、かなり負荷になっている様ですね。
特に成田空港に着いた人は大変で、名古屋や福岡の停留場所に移動するのが、ザラとか。
私とwifeの場合は、帰国前のLAでのPCR検査(現地時間:12/1(水))の結果が出てから、搭乗のチェックインを行いました。
その時点ではUSAからの帰国の場合は帰国後の検査で陰性であれば、停留なしで自宅での14日間(到着日翌日からカウント)の待機で良かったのですが。。。
12/2(木:現地時間の晩)にLAXのANAチェックインカウンタで知らされたのが、USAからの帰国であっても加州の場合は、3日間の停留が急遽決まった(12/4の日本着から適用)とのこと。その瞬間頭の中が、真っ白に成りました。。。ο(オミクロン)株発生のためです。
勤務先に急遽電子メールで連絡です。
なのですが、停留期間を含めて到着翌日から14日間の待機ということで一安心です。結果的に12/5,6,7で3日間の停留後、自宅に戻れました。停留3日目の朝に再び検体検査を行って、その結果が陰性である必要あり。
停留中の三度の食事は、こんな感じです。
12/4(土)から停留が始まったホテル(羽田近郊)迄娘にパソコンを届けてもらって、12/6,7はテレワーク※としました。
この時は、私の生涯で最も子供を頼もしく思えましたね。
※ ただし、VPNは通るのですが、頻繁にセッションが途切れて非常に非効率でした。
ホテルのイントラから外部に接続する際に、ネットの通信のベストエフォートは十分出ている様なのですが、単位時間あたりに交信できる
データ量に制約が掛かっている様でした。結果的にセッションタイムアウトが定期的 & 頻繁に発生
wifiを諦めてLANケーブルを借りたのですが、現象は変わりませんでした。
その結果として更にホテルに無理をお願いしようとも思いましたが、耐えることにしました。
自宅待機あけに、出掛けてみたいです。
さてと、久しぶりにMicroPython
からの続きになります。”LAへの旅”は、後ほどになります。
# ARM-First w/ESP8266 AT Command wifi(First-Bee)
# So far much better case
# Last update 2021/12/11 by jk1brk
from pyb import UART
from wrequest import Nrequest,Webserver # wrequest.py in SD Card@ARM-First
from lcd1602 import * # lcd1602.py in SD Card@ARM-First
def web_page(res):
connection_state = 'Unknown'
# I do not like this portion below, because it's trikky to show an other state.
# To show the position "?,CONNECT" when relaoding case
if res.find('0,CONNECT') == res.find('CONNECT')-2:
connection_state = '1,'
elif res.find('1,CONNECT') == res.find('CONNECT')-2:
connection_state = '0,'
print(res.find('CONNECT')-2)
html = b"""<!DOCTYPE html><html>
<head> <title>STM32 MicroPython Web Server</title> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<style>html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;}
h1{color: #0F3376; padding: 2vh;}p{font-size: 1.5rem;}.button{display: inline-block; background-color: #e7bd3b; border: none;
border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}
.button2{background-color: #4286f4;}
</style></head>
<body>
<h1>STM32 MicroPython Web Server</h1>
<p>Hello world !</p>
<p>Connection state: <strong>""" + connection_state + """</strong>CONNECT</p>
</body></html>"""
return html
#################################################################
# main()
#################################################################
def main():
# Web server starts!
while True:
if ws.rec_send(nreq,web_page) != 1:
print("?")
#################################################################
if __name__ == "__main__":
lcd_init()
SerialUART2 = 2
# Init. with given baudrate, timeout & buffer length
uart = pyb.UART(SerialUART2, 115200, timeout=3000, read_buf_len=4096)
# Reset First-Bee & creating n/w object
nreq = Nrequest(uart, 'B1')
# Set max. connections count of server & creating ws object
ws = Webserver(uart,'2',nreq)
main()
にあるweb_page()の中身を変えることで、いろいろなWeb Serverになります。
以下は、WiFiとWeb Server用のクラスライブラリです。ARM-Firstに装着したSD Cardに常駐
# ARM-First w/ESP8266 AT Command wifi(First-Bee)
# So far much better case
# Last update 2021/12/13 by jk1brk
from pyb import UART, Timer
from lcd1602 import * # lcd1602.py in SD Card@ARM-First
#############################################################
# esp8266 AT command control class library
#############################################################
class Nrequest:
def __init__(self,uart,reset):
self.uart = uart
self.reset = Pin(reset,Pin.OUT)
self.reset.value(0)
pyb.delay(1)
self.reset.value(1)
print('Wait->',end='')
for count in range(5):
print('->', end='')
lcd_string("Wait... ",LCD_LINE_1)
lcd_string(" ",LCD_LINE_2)
time.sleep_ms(500)
print()
while True:
try:
res = self.atout('AT+CWMODE_CUR=1')
if b'OK' in res:
print("Open Network UART")
lcd_string("Open N/W UART ",LCD_LINE_2)
time.sleep_ms(500)
return
else:
print("Not Open UART")
lcd_string("Not Open UART ",LCD_LINE_2)
return
except:
pass
def atout(self,cmd,timeout=10000):
t_count = 0
resp = b''
self.uart.write(cmd+'
')
while True:
if self.uart.any() != 0:
res = self.uart.readline()
resp += res
if b'OK' in res:
#print(resp)
return resp
if b'ERROR' in res:
return b''
if t_count==timeout:return "Command_rp Timeout"
t_count += 1
pyb.delay(1)
def connect(self,ssid,password,timeout=10000):
self.atout('AT+CWMODE_CUR=1')
res = self.atout('AT+CWJAP_CUR="%s","%s"'%(ssid,password),timeout)
#print(res)
if "CONNECTED" in res:print("WIFI CONNECTED")
else:
print("Not connected try again!")
res = self.atout('AT+CIFSR',timeout)
if "STAIP" in res:
work = res.decode().split()[1]
print(work.split(',')[1])
else:
print("No IP address detected!")
return b''
return work.split(',')[1]
#############################################################
# web server control class library
#############################################################
HEADER = b"""
HTTP/1.0 200 OK
Connection: close
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36
Content-Type: text/html; charset=utf-8
"""
class Webserver:
def __init__(self,uart,num,nreq):
self.uart = uart
self.num = num
self.nreq = nreq
print("=== START CONNECTING ===")
# init. uart with given parameters
self.uart.init(115200, bits=8, parity=None, stop=1)
# To connect wifi, Replace with your network credentials
lcd_string("Connecting......",LCD_LINE_1)
lcd_string("Wait a moment...",LCD_LINE_2)
# Replace with your network credentials
res = self.nreq.connect("SSID","PASSWORD")
if (res != b''):
# LCD1602 opening message
lcd_string("WiFi & LCD Test!",LCD_LINE_1)
lcd_string("IP"+res,LCD_LINE_2)
else:
lcd_string("WiFi & LCD Test!",LCD_LINE_1)
lcd_string("Fail, Try again!",LCD_LINE_2)
res = self.nreq.atout('AT+CIPMODE=' + '0')
if "OK" in res:print("Non tranparent mode")
else: print("Error!!:tranparent mode")
res = self.nreq.atout('AT+CIPMUX=' + '1')
if "OK" in res:print("Set multiple connections")
else: print("Error!!:multiple connections")
self.nreq.atout('AT+CIPSERVERMAXCONN=' + self.num) # ->
if "OK" in res:print("Set max connections count of server:"+ self.num)
else: print("Error!!:max connections")
res = self.nreq.atout('AT+CIPSERVER=1,80')
if "OK" in res:print("Web Server started!")
else: print("Error!!:Start server")
def send_page(self,nreq,id,page):
self.nreq = nreq
self.id = id
self.page = page
res = self.nreq.atout('AT+CIPSEND=' + str(self.id) +',' + str(len(self.page))) # ->
if "OK" in res:res = self.nreq.atout(self.page)
else:
return 0
if "OK" in res:return 1
else: return 0
def rec_send(self,nreq,web_page):
bin_data = b''
response = b''
self.nreq = nreq
self.web_page = web_page
if self.nreq.uart.any():
# If the data type byte, read return data for the row of data
bin_data = self.nreq.uart.read()
# Hand to the information printed on the terminal
#print('Echo Byte: {}'.format(bin_data))
# Converted to a string of data bytes default byte UTF-8 encoding
print('Echo String: {}'.format(bin_data.decode()))
print('-----------------------------------------')
res = bin_data.decode()
# Set HTML to show & change LCD ON/OFF
response = self.web_page(res)
# connection link id = 0
if "0,CONNECT" in res: # ->
self.send_page(self.nreq,0,HEADER)
if self.send_page(self.nreq,0,response) == 1: # ->
print("Show page0")
else:
print(res)
return 0
elif "0,CLOSED" in res: # ->
print("0 Closed")
# connection link id = 0
elif "1,CONNECT" in res: # ->
self.send_page(self.nreq,1,HEADER)
if self.send_page(self.nreq,1,response) == 1: # ->
print("Show page1")
else:
print(res)
return 0
elif "1,CLOSED" in res: # ->
print("1 Closed")
return 1