# wifi_csi **Repository Path**: csi_learning_team/wifi_csi ## Basic Information - **Project Name**: wifi_csi - **Description**: No description available - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2018-09-03 - **Last Updated**: 2024-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 安装与配置 ## 安装python3.6 --- 1. 依次执行以下命令 ```shell sudo add-apt-repository ppa:jonathonf/python-3.6 sudo apt-get update sudo apt-get install python3.6 ``` 2. 在[pypi官网](https://pypi.org)下载 __setuptools__ , __pip__ 的源代码之后解压、编译和安装 ```shell python3.6 setup.py build sudo python3.6 setup.py install ``` 3. 此时已成功更新 __pip__,可以选择将python3.6连接到python3上(建议) ```shell sudo rm /usr/bin/python3 sudo ln -s /usr/bin/python3.6 /usr/bin/python3 ``` 4. 至此python3.6安装完毕 ## 安装python模块 --- 需要安装的python模块如下: * PyQt5 * matplotlib * pexpect * pyperclip 执行如下命令安装: ```shell sudo pip3 install -i https://pypi.doubanio.com/simple ``` 其中 [https://pypi.doubanio.com/simple](https://pypi.doubanio.com/simple) 是豆瓣的pip源,可以修改为其他源 也可以直接使用 ```shell sudo pip3 install -r requirements.txt -i https://pypi.doubanio.com/simple ``` 在 __requirements.txt__ 中复制上述的python模块(可以忽略版本,默认安装最新版) 注意:使用matplotlib需要安装python3-tk ```shell sudo apt-get install python3-tk ``` ## 安装Google Chrome浏览器 --- 依次执行如下命令 ```shell sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/ wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - sudo apt-get update sudo apt-get install google-chrome-stable ``` 安装完毕 ## 安装PyCharm IDE --- 1. 在官网 [ __Jetbrains__ ](https://www.jetbrains.com/pycharm)上下载PyCharm IDE,选择Community版本 2. 解压后在当前目录执行 ./bin/pycharm.sh 3. 按照提示配置PyCharm IDE 4. 在如下界面勾选复选框 ![charm](./md_pic/charm.png) 之后即可用命令charm启动PyCharm IDE ## 使用wifi_csi工具 --- 1. 启动一终端,执行如下命令 ```shell git clone https://www.gitee.com/zhaoziqiu1995/wifi_csi.git ``` 2. 将 __wifi_csi__ 文件夹下的 __csi_log__ 和 __csi_start__ 两个脚本复制到用户主目录(/home/<username>/) 3. 启动终端,执行上述两个脚本 4. 再次启动一终端,执行 __iwconfig__ 命令,查看wlan设备名称(wlan0,wlan1...),并修改 __wifi_csi__ 目录下的 __csi_conf__ 文件数据 5. 在启动/停止Wi-Fi CSI服务的可视化界面上点击启动,启动成功后在下面修改ping命令间隔时间,之后点击复制 6. 再次启动一终端,将ping命令粘贴在命令行,执行 7. 此时可以开启一个socket,地址:127.0.0.1(localhost),端口号8899,即可接收到CSI数据,可以参考文件 wifi_csi/csi_read/from_server/\_\_init\_\_.py ## PyQt与Matplotlib画图结合 --- [http://whuhan2013.github.io/blog/2017/03/28/pyqt-matplotlib-learn/](http://whuhan2013.github.io/blog/2017/03/28/pyqt-matplotlib-learn/) 1. 通过matplotlib.backends.backend_qt5agg类连接PyQt5: ```python import matplotlib matplotlib.use("Qt5Agg") # 声明使用QT5 from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure from PyQt5 import QtWidgets,QtCore from PyQt5.QtWidgets import QMainWindow,QApplication import sys ``` 2. 创建FigureCanvas类: ```python class Figure_Canvas(FigureCanvas): # 通过继承FigureCanvas类,使得该类既是一个PyQt5的Qwidget,又是一个matplotlib的FigureCanvas,这是连接pyqt5与matplotlib的关键 def __init__(self, parent=None, width=11, height=5, dpi=100): fig = Figure(figsize=(width, height), dpi=100) # 创建一个Figure,注意:该Figure为matplotlib下的figure,不是matplotlib.pyplot下面的figure FigureCanvas.__init__(self, fig) # 初始化父类 self.setParent(parent) self.axes = fig.add_subplot(111) # 调用figure下面的add_subplot方法,类似于matplotlib.pyplot下面的subplot方法 def test(self): x = [1,2,3,4,5,6,7,8,9] y = [23,21,32,13,3,132,13,3,1] self.axes.plot(x, y) ``` 3. GUI上通过控件呈现matplotlib画出来的图形——通过QtWidgets.QGraphicsView控件来实现: ```python class Mytest(QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 设置窗口标题 self.setWindowTitle('My First App') self.setFixedSize(800, 600) # ===通过graphicview来显示图形 self.graphicview = QtWidgets.QGraphicsView() # 第一步,创建一个QGraphicsView self.graphicview.setObjectName("graphicview") dr = Figure_Canvas() #实例化一个FigureCanvas dr.test() # 画图 graphicscene = QtWidgets.QGraphicsScene() # 第三步,创建一个QGraphicsScene,因为加载的图形(FigureCanvas)不能直接放到graphicview控件中,必须先放到graphicScene,然后再把graphicscene放到graphicview中 graphicscene.addWidget(dr) # 第四步,把图形放到QGraphicsScene中,注意:图形是作为一个QWidget放到QGraphicsScene中的 self.graphicview.setScene(graphicscene) # 第五步,把QGraphicsScene放入QGraphicsView self.graphicview.show() # 最后,调用show方法呈现图形!Voila!! self.setCentralWidget(self.graphicview) self.graphicview.setFixedSize(800,600) if __name__ == '__main__': app = QApplication(sys.argv) mytest=Mytest() mytest.show() app.exec_() ``` ![figure canvas](./md_pic/figure_canvas.png) 4. 柱状图实现 ```python #-*- coding: utf-8 -*- import matplotlib matplotlib.use("Qt5Agg") # 声明使用QT5 from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure from PyQt5 import QtWidgets,QtCore from PyQt5.QtWidgets import QMainWindow,QApplication import numpy as np import sys import matplotlib.font_manager as fm myfont = fm.FontProperties(fname='C:/Windows/Fonts/msyh.ttc') class Figure_Canvas(FigureCanvas): # 通过继承FigureCanvas类,使得该类既是一个PyQt5的Qwidget,又是一个matplotlib的FigureCanvas,这是连接pyqt5与matplot lib的关键 def __init__(self, parent=None, width=8, height=5, dpi=100): fig = Figure(figsize=(width, height), dpi=100) # 创建一个Figure,注意:该Figure为matplotlib下的figure,不是matplotlib.pyplot下面的figure FigureCanvas.__init__(self, fig) # 初始化父类 self.setParent(parent) self.axes = fig.add_subplot(111) # 调用figure下面的add_subplot方法,类似于matplotlib.pyplot下面的subplot方法 def test(self): #x = ['第1周','第2周',3,4,5,6,7,8,9] x = ['聊天', '支付', '团购', '在线视频'] idx = np.arange(len(x)) y=[23,21,32,13] width = 0.5 #y = [23,21,32,13,3,132,13,3,1] self.axes.bar([0,1,2,3],y,width,align="center") self.axes.set_xticks([0,1,2,3]) self.axes.set_xticklabels(x,fontproperties=myfont) class Mytest(QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 设置窗口标题 self.setWindowTitle('My First App') self.setFixedSize(800, 600) # ===通过graphicview来显示图形 self.graphicview = QtWidgets.QGraphicsView() # 第一步,创建一个QGraphicsView self.graphicview.setObjectName("graphicview") # self.gridLayout_2.addWidget(self.graphicview, 0, 0) #第二步,将该QGraphicsView放入Layout中 dr = Figure_Canvas() #实例化一个FigureCanvas dr.test() # 画图 graphicscene = QtWidgets.QGraphicsScene() # 第三步,创建一个QGraphicsScene,因为加载的图形(FigureCanvas)不能直接放到graphicview控件中,必须先放到graphicScene,然后再把graphicscene放到graphicview中 graphicscene.addWidget(dr) # 第四步,把图形放到QGraphicsScene中,注意:图形是作为一个QWidget放到QGraphicsScene中的 self.graphicview.setScene(graphicscene) # 第五步,把QGraphicsScene放入QGraphicsView self.graphicview.show() # 最后,调用show方法呈现图形!Voila!! self.setCentralWidget(self.graphicview) #self.graphicview.setFixedSize(800,600) if __name__ == '__main__': app = QApplication(sys.argv) mytest=Mytest() mytest.show() app.exec_() ``` ![bar](./md_pic/bar.png)