Python Flask框架实现Proteus仿真Arduino与网页数据交互
作者:liu_jiankang 发布时间:2022-01-18 08:43:16
实验原理
模拟电脑通过串口与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开关状态,可以看到网页中灯泡照片变亮变暗
来源:https://blog.csdn.net/weixin_41573966/article/details/127940225


猜你喜欢
- 本文实例讲述了Python3.5局部变量与全局变量作用域。分享给大家供大家参考,具体如下:1、局部变量与全局变量定义:在子程序(函数)中定义
- max找出tensor 的行或者列最大的值:找出每行的最大值:import torchoutputs=torch.FloatTensor([
- 一、创建飞书机器人自定义飞书机器人操作步骤,具体详见飞书官方文档:《机器人 | 如何在群聊中使用机器人?》二、调用飞书发送消息自定义机器人添
- 前言MySQL的binlog日志是MySQL日志中非常重要的一种日志,记录了数据库所有的DML操作。通过binlog日志我们可以进行数据库的
- 在IE浏览器调试代码,我们可以选择使用 IE WebDeveloper但是我个人用惯了ff浏览器下的firebug,所以在网上搜了一下,如果
- 使用cv2.canny进行图像边缘检测CV2提供了提取图像边缘的函数canny。其算法思想如下:1.使用高斯模糊,去除噪音点(cv2.Gau
- tempfile.TemporaryFile如何你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFi
- 本文研究的主要是python实现Decorator模式,具体介绍如下。一般来说,装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是
- Go操作MySQL安装: go get -u github.com/go-sql-driver/mysqlGO语言的操作数据库的驱动原生支持
- Case:需要给一个现有的shp数据创建一个字段,并将属性表中原有的一个文本类型的属性转换为整型后填入新创建的字段。Problem:新字段创
- 选项default-charaset-set=utf8;然后创建一个数据表 create table a_table(b varchar(2
- 因为是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是
- /*不同服务器数据库之间的数据操作*/ --创建链接服务器 exec sp_addlinkedserver 'ITSV ',
- 本文实例讲述了MySQL学习笔记之创建、删除、修改表的方法。分享给大家供大家参考,具体如下:创建表:create table users(
- 本文实例为大家分享了SpringBoot整合Mybatis使用Druid数据库连接池的方法,具体内容如下在SpringBoot项目中,增加如
- 一、架构介绍Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方
- 本文实例讲述了Python动态导入模块的方法。分享给大家供大家参考,具体如下:一、正常导入模块正常模块导入方式: import module
- 在并发编程中,资源的分配和回收是一个很重要的问题。对于频繁的分配和回收,会造成大量的开销。而 Go 语言的 Sync.Pool 是一个可以帮
- 本文实例讲述了Python自定义函数实现求两个数最大公约数、最小公倍数。分享给大家供大家参考,具体如下:1. 求最小公倍数的算法:最小公倍数
- 本文实例讲述了Python编程入门之Hello World的三种实现方式。分享给大家供大家参考,具体如下:第一种方式:$python>