4
3

More than 1 year has passed since last update.

ESP32でWi-FiのRSSIを取得する

Last updated at Posted at 2022-07-08

目次

はじめに
使用する物
説明
実行結果
参考

はじめに

大学の研究でWi-FiのRSSIを利用して屋内測位をしようという事になりました.
micropythonで良い感じのライブラリが用意されてたのでそれを使った取得方法を書いていきます.
今回はESP32を4台使用し,うち3台をwifiのアクセスポイントに,1台を取得に使用します.

使用する物

・ESP-WROOM-32(4台)
だけ!
言語はmicropythonです.
使用しているファームウェアは「MicroPython v1.18」です.

説明

まず基本になりますが,ESP32にファームウェアを書き込むこととboot.pyを編集してwifiに接続する状態にしてください.
※これをしないと何も始まりません笑

今回は使用するESP32のうち1台を取得用に,残りをアクセスポイント(以下AP)にして取得用のESP32でRSSIを取得していきます.

APのソースコードはこうなってます.

AP.py
import network

IP = 'アクセスポイントにするESP32のIPアドレス'

def wiFiAccessPoint(ip,mask,gw,dns):
    ap = network.WLAN(network.AP_IF)
    count = 0
    while count < 100:
        try:
            ap.config()
            break
        except:
            count += 1
            print('.',end="")
    ap.ifconfig((ip,mask,gw,dns))
    print("(ip,netmask,gw,dns)=" + str(ap.ifconfig()))
    ap.active(True)
    return ap
    
AP_CONFIG = wiFiAccessPoint(IP,'255.255.255.0',IP,'8.8.8.8')

APにするESP32のIPアドレスの確認方法は以下です.

import network
ap_if = network.WLAN(network.AP_IF)
ap_if.ifconfig()

これを入力すると,(IPアドレス、ネットマスク、ゲートウェイ、DNS)が表示されるので確認できます.
AP.pyをAPに使用するESP32に書き込んで実行します.

次に取得側です.
取得側のソースコードは以下となっています.

rssi.py
import network

wlan = network.WLAN(network.STA_IF)
wlan.active(True)

def wlan_scan():
    return network.WLAN(network.STA_IF).scan()

def rssi():
    try:
        w_scan = wlan_scan()
        if w_scan != []:
            for a in range(len(w_scan)):
                if w_scan[a][0] == ESP32のSSID(1台目):
                    name1 = w_scan[a][0]
                    rssi1 = w_scan[a][3]
			        print(name1)
                    print(rssi1)

                elif w_scan[a][0] == ESP32のSSID(2台目): 
                    name2 = w_scan[a][0]
                    rssi2 = w_scan[a][3]
                    print(name2)
                    print(rssi2)

                elif w_scan[a][0] == ESP32のSSID(3台目):
                    name3 = w_scan[a][0]
                    rssi3 = w_scan[a][3]
                    print(name3)
                    print(rssi3)
    except Exception as e:
        print(e)   
            
if __name__ == '__main__':
    print('start')
    while True:
        rssi()
    
print('end')

これを実行すると指定したESP32のSSIDとRSSIをプログラムを終了するまで持ってきてくれます.
例外処理はとりあえずプログラムが停止しないようにしたかったので追加しました.

また,SSIDの確認は以下のコードをAPのESP32で実行すると確認が出来るので,APのIPアドレスを確認するついでにやっておきましょう.

import network
ap_if = network.WLAN(network.AP_IF)
ap_if.ifconfig("essid")

実行結果

きちんとAPを立てる事が出来た上で,rssi.pyを実行すると...
quiita.png

が表示されます.
今回はAPを3台立てるのが面倒くさかったので1台での結果ですが,3台verもきちんと確認できています!

おわり!!!!!
そりではノシ

参考

MicroPython ライブラリ クラス WLAN -- 組込み WiFi インタフェースの制御
https://micropython-docs-ja.readthedocs.io/ja/latest/library/network.WLAN.html

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3