Python Flask框架实现Proteus仿真Arduino与网页数据交互

 更新时间:2022年11月23日 10:00:21   作者:liu_jiankang  
这篇文章主要介绍了Python Flask框架实现Proteus仿真Arduino与网页数据交互,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

实验原理

模拟电脑通过串口与Arduino开发板通信,并通过网页实现简单交互

开发环境

1、Windows10

2、Python3.10

3、Proteus8.6

4、com0com虚拟串口工具

Flask虚拟环境

先安装virtualenv:

pip install virtualenv

建立项目文件夹(比如demo_4)

在demo_04文件夹内,文件-打开powershell

建立虚拟环境venv

PS D:\code\flask\demo_04> virtualenv venv

demo_04文件夹里面会出现venv文件夹,后面安装的python库都装在这个文件夹里面

激活虚拟环境:

PS D:\code\flask\demo_04> .\venv\Scripts\activate

在虚拟环境中安装Flask和pyserial(python的串口库)

(venv) PS D:\code\flask\demo_04> pip install Flask pyserial

如果下载慢,建议修改pip源为清华大学源(请同学们自行百度)

至此开发环境配置完毕

Python Flask源码

文件目录结构:

demo_04
    -html
        index.html
    -static
        -images
            pic_bulboff.gif
            pic_bulbon.gif
    app.py

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function(){
	$("#button_open").click(function(){
		$.get("http://127.0.0.1:5000/open",function(data,status){
			alert("数据: " + data + "\n状态: " + status);
		});
	});
    $("#button_close").click(function(){
		$.get("http://127.0.0.1:5000/close",function(data,status){
			alert("数据: " + data + "\n状态: " + status);
		});
	});
    setInterval(function() {
        $.get("http://127.0.0.1:5000/get",function(data,status){
            if (data == 1){
                document.getElementById("myimage").src="static/images/pic_bulbon.gif";
            }
            else{
                document.getElementById("myimage").src="static/images/pic_bulboff.gif";
            }
		});
    }, 1000);
});
</script>
</head>
<body>
<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>
<button id="button_open">打开串口COM2</button>
<button id="button_close">关闭串口COM2</button>
<img id="myimage" src="static/images/pic_bulboff.gif" width="100" height="180">
</body>
</html>

app.py

import os
import serial
from flask import Flask
from flask import send_from_directory
app = Flask(__name__)
root = os.path.join(os.path.dirname(os.path.abspath(__file__)), "html")#html是个文件夹
@app.route('/')
def home():
    return send_from_directory(root, "index.html")#homepage.html在html文件夹下
@app.route('/open')
def open_port():
    global ser
    port = 'COM2'
    baudrate = 9600  # 设置波特率
    timeout = 1
    ser = serial.Serial(port, baudrate, timeout=timeout)
    return 'Serial Port open'
@app.route('/close')
def close_port():
    ser.close()
    return 'Serial Port close'
@app.route('/get')
def read_port():
    ser.reset_input_buffer()
    line = ser.readline()
    return line
if __name__ == '__main__':
   app.run(debug = True)

用Proteus仿真Arduino

原理图:

Arduino源码:

void setup() {
  // put your setup code here, to run once:
pinMode(0,INPUT);  
Serial.begin(9600);
Serial.println("hello my friend!");
pinMode(2,INPUT);          
}
void loop() {
  // put your main code here, to run repeatedly:
  if(digitalRead(2)==0) {
    Serial.println("0");
  }else{
    Serial.println("1");
  }
  delay(500);
}

用com0com建立虚拟串口对

安装完com0com后,开始菜单打开Setup Command Prompt,运行下图的命令即可创建一个虚拟串口对COM1和COM2(往COM1写数据,可以从COM2读出来,反之亦然)

创建完后,设备管理器可以看到新增了串口设备:

本实验中,Proteus中仿真的Arduino向串口COM1中写数据(在Proteus中双击COMPIM控件,设置Physical port为COM1),Python代码app.py从COM2读取数据,从而实现网页和Arduino的数据交互。

运行程序

1、Proteus中点击三角按钮开始仿真,COMPIM控件上可以看到TXD管脚闪烁,说明在发送数据

2、powershell中运行app.py

(venv) PS D:\code\flask\demo_04> python .\app.py

打开浏览器地址http://127.0.0.1:5000 看到网页:

点击打开串口按钮,然后在Proteus中切换SW1开关状态,可以看到网页中灯泡照片变亮变暗

到此这篇关于Python Flask框架实现Proteus仿真Arduino与网页数据交互的文章就介绍到这了,更多相关Proteus仿真Arduino与网页交互内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用python验证代理ip是否可用的实现方法

    使用python验证代理ip是否可用的实现方法

    验证代理IP是否可用。原理是使用代理IP访问指定网站,如果返回状态为200,表示这个代理是可以使用的。这篇文章重点给大家介绍使用python验证代理ip是否可用的实现方法,感兴趣的朋友一起看看吧
    2018-07-07
  • Python使用zip合并相邻列表项的方法示例

    Python使用zip合并相邻列表项的方法示例

    这篇文章主要介绍了Python使用zip合并相邻列表项的方法,涉及zip、iter函数合并相邻列表项、切片等相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • 解读时间序列分析之ADF检验

    解读时间序列分析之ADF检验

    这篇文章主要介绍了解读时间序列分析之ADF检验,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • python与caffe改变通道顺序的方法

    python与caffe改变通道顺序的方法

    今天小编就为大家分享一篇python与caffe改变通道顺序的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • ubuntu16.04升级Python3.5到Python3.7的方法步骤

    ubuntu16.04升级Python3.5到Python3.7的方法步骤

    这篇文章主要介绍了ubuntu16.04升级Python3.5到Python3.7的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 解决pytorch 损失函数中输入输出不匹配的问题

    解决pytorch 损失函数中输入输出不匹配的问题

    这篇文章主要介绍了解决pytorch 损失函数中输入输出不匹配的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Python+wxPython实现一个简单的音乐播放器

    Python+wxPython实现一个简单的音乐播放器

    这篇文章主要为大家详细介绍了如何使用Python编程语言和wxPython模块创建一个简单的音乐播放器,文中的示例代码讲解详细,感兴趣的可以了解下
    2023-09-09
  • Django权限机制实现代码详解

    Django权限机制实现代码详解

    这篇文章主要介绍了Django权限机制实现代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • python logging 日志的级别调整方式

    python logging 日志的级别调整方式

    今天小编就为大家分享一篇python logging 日志的级别调整方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python字符串验证的几种实现方法

    python字符串验证的几种实现方法

    字符串的验证是确保数据符合特定要求的关键步骤之一,本文主要介绍了python字符串验证的几种实现方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07

最新评论