Wireless Lab 2

tags: Wireless

:star: 實驗結果

  1. 跑完OTAA傳輸模式的流程,分別截圖join_ttn.py,send_ttn.py的結果
  2. 將send_ttn.py的message改成:Wireless Lab2
  3. 傳輸資料後用MQTT查看,並用base64解密截圖。
  4. 以組為單位(一個人上傳即可),將這些截圖結果貼成一個word檔案,命名為wireless-lab2-groupxx.docx,並上傳到LMS作業區。

What is OTAA?

OTAA模式送出 (join_ttn.py)

這份程式主要修改來自 jeroennijhof 的程式碼

  1. 實驗程式碼載下來
    ​​​​$ git clone https://github.com/Ox7FFFFFFF/Wireless-Lab2
    
  • 程式資料夾
    LoRaWAN - 與LoRaWAN相關的程式
    SX127x - 控制晶片的SPI程式
    send_ttn.py - 資料送出
    join_ttn.py - 送出Join封包
    config.json - Activated [DevAddr, NwkSKey, AppSKey]配置
  1. join_ttn.py填入deveui,appeui,appkey
  • DEV_EUI : 000000000000001x (x=組別)
    ​​​​# Init ​​​​deveui = list(bytearray.fromhex('DEV_EUI')) #輸入你組別裝置EUI ​​​​appeui = list(bytearray.fromhex('1234efc7104f1230')) #勿動 ​​​​appkey = list(bytearray.fromhex('a346b6faef2bd33c16fe9b1d8d47a11d')) #勿動 ​​​​devnonce = [randrange(256), randrange(256)]
  1. 發送Join Request,裡面會帶入deveui,appeui,devnonce

    ​​​​ def join(self): ​​​​ lorawan = LoRaWAN.new(appkey) ​​​​ lorawan.create(MHDR.JOIN_REQUEST, {'deveui': deveui, ​​​​ 'appeui': appeui, 'devnonce': devnonce}) ​​​​ self.write_payload(lorawan.to_raw()) ​​​​ self.set_mode(MODE.TX)
  2. 送出uplink後,會跳到on_tx_done

    ​​​​ def on_tx_done(self): ​​​​ self.clear_irq_flags(TxDone=1) ​​​​ print("TxDone") ​​​​ # 切換到rx ​​​​ self.set_mode(MODE.STDBY) ​​​​ self.set_dio_mapping([0,0,0,0,0,0]) ​​​​ self.set_invert_iq(1) ​​​​ self.reset_ptr_rx() ​​​​ sleep(4) ​​​​ self.set_mode(MODE.RXCONT)
  3. 當收到downlink時,會跳到on_rx_done

    ​​​​ def on_rx_done(self): ​​​​ print("RxDone") ​​​​ self.clear_irq_flags(RxDone=1) ​​​​ payload = self.read_payload(nocheck=True) ​​​​ lorawan = LoRaWAN.new([], appkey) ​​​​ lorawan.read(payload) ​​​​ lorawan.get_payload() ​​​​ # 判斷格式是否為JOIN_ACCEPT ​​​​ if lorawan.get_mhdr().get_mtype() == MHDR.JOIN_ACCEPT: ​​​​ print("get mic: ",lorawan.get_mic()) ​​​​ print("compute mic: ",lorawan.compute_mic()) ​​​​ print("valid mic: ",lorawan.valid_mic()) ​​​​ # 判斷downlink是不是自己的 ​​​​ if lorawan.valid_mic(): ​​​​ devaddr = binary_array_to_hex(lorawan.get_devaddr()) ​​​​ nwskey = binary_array_to_hex(lorawan.derive_nwskey(devnonce)) ​​​​ appskey = binary_array_to_hex(lorawan.derive_appskey(devnonce)) ​​​​ print("devaddr:",devaddr) ​​​​ print("nwskey :",nwskey) ​​​​ print("appskey:",appskey) ​​​​ # 將收到的devaddr,nwskey,appskey寫到檔案中 ​​​​ config = {'devaddr':devaddr,'nwskey':nwskey,'appskey':appskey,'fCnt':0} ​​​​ data = json.dumps(config, sort_keys = True, indent = 4, separators=(',', ': ')) ​​​​ fp = open("config.json","w") ​​​​ fp.write(data) ​​​​ fp.close() ​​​​ print("Join Accept") ​​​​ sys.exit(0) ​​​​ else: ​​​​ print("Fail to join!") ​​​​ sys.exit(0)
  1. Join成功會取得devaddr,nwkskey,appskey,並寫到config.json

  2. 使用上次的send_ttn.py傳輸資料,並使用MQTT查看傳輸的資料