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ケーブルを借りたのですが、現象は変わりませんでした。

その結果として更にホテルに無理をお願いしようとも思いましたが、耐えることにしました。笑い泣き

 

下差し自宅待機あけに、出掛けてみたいです。

https://twitter.com/queen_exh

 

さてと、久しぶりに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
グッ