Проблема с Flask, Arduino и PySerial - PullRequest
0 голосов
/ 03 мая 2019

Я на Windows и я пытался подключить Arduino с Flask .

Я могу создать соединение с Arduino , используя PySerial , но когда я использую соединение в Flask , оно не работает. вместо этого я получаю следующую ошибку:

raise SerialException("could not open port {!r}: {!r}".format(self.portstr,
ctypes.WinError()))
serial.serialutil.SerialException: could not open port 'COM5': PermissionError(1
3, 'Denied Access.', None, 5)

Я уже пробовал:

  • смена порта
  • запуск консоли от имени администратора

Вот мой код:

from flask import Flask, render_template, request
import time
import serial

app = Flask(__name__)

@app.route("/show/all", methods=["GET", "POST"])
def showAll():
    if request.method == "POST":
        sess = serial.Serial("COM5", 9600)
        dt = sess.readline().decode("utf-8")
        return dt

    else:
        return render_template("show.html") 

app.run()

Я делаю AJAX-запрос для запуска соединения с Arduino:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="{{ url_for('static', filename = 'css/styles.css') }}">
    <script src="{{url_for("static", filename="js/script.js")}}"></script>
    <title>Document</title>
</head>
<body>
    <h1 class="titulo">Datos:</h1>

    <script>
    function make_request(){
        var ajax_request = new XMLHttpRequest();

        ajax_request.addEventListener("readystatechange", function(){
            if(ajax_request.status == 200 && ajax_request.readyState == 4){
                var nw_obj = document.createElement("p");
                nw_obj.classList.add("info");
                nw_obj.innerHTML = ajax_request.responseText;
                document.body.appendChild(nw_obj);
            }
        });

        ajax_request.open("POST", "/show/all", true);
        ajax_request.send();
    }

    window.addEventListener("load", {
        setInterval(make_request, 1000);
    });
    </script>

</body>
</html>

Код Arduino:

int contador = 0;

void setup() {
    Serial.begin(9600);
}

void loop() {
    contador++;
    Serial.println(contador);
    delay(1000);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...