浮点数和索引超出范围问题的文字无效



我知道这个问题已经被问过了,但我无法弄清楚这个问题。我正在使用Python Flask进行Web编程。我正在从Arduino IDE获取数据。因此,每当我运行 Python 程序时,它都会显示此错误,说列表不在索引中。加上有时无效的浮点数文字。这是我的代码:

蟒蛇代码:

import sqlite3
import random
from flask import Flask, render_template, url_for, jsonify, app, request
from flask import Response
import serial
import time
import json
import math
from time import time,gmtime,strftime
from datetime import datetime, timedelta
import re
app = Flask(__name__)
obj= serial.Serial( '/dev/ttyS0' ,57600)
@app.route('/', methods=['GET'])
def index():
return render_template('index.html')
@app.route('/data', methods=['GET'])
def rand():
conn = sqlite3.connect('table.db',timeout=15)
cursor = conn.cursor()
datestamp = datetime.now()
values= obj.readline().split(',')
cursor.execute('INSERT INTO ADC_DATA(Time,data1,data2,data3,data4,data5,data6,data7,data8,data9,data10,data11,data12) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)',(datestamp,values[0],values[1],values[2],values[3],values[4],values[5],values[6],values[7],values[8],values[9],values[10],values[11]))
conn.commit()
return jsonify(result=float(values[0]),result1=float(values[1]),result2=float(values[2]),result3=float(values[3]),result4=float(values[4]),result5=float(values[5]),result6=float(values[6]),result7=float(values[7]),result8=float(values[8]),result9=float(values[9]),result10=float(values[10]),result11=float(values[11]))
if __name__ == '__main__':
app.run(host='0.0.0.0',threaded=True)

对于Arduino,代码的主要部分是:

void loop() {
value1 = analogRead(pin1);
value2 = analogRead(pin2);
value3 = analogRead(pin3);
value4 = analogRead(pin4);
value5 = analogRead(pin5);
value6 = analogRead(pin6);
value7 = analogRead(pin7);
value8 = analogRead(pin8);
value9 = analogRead(pin9);
value10 = analogRead(pin10);
value11 = analogRead(pin11);
value12 = analogRead(pin12);
Serial1.print(value1);
Serial1.print(",");
Serial1.print(value2);
Serial1.print(",");
Serial1.print(value3);
Serial1.print(",");
Serial1.print(value4);
Serial1.print(",");
Serial1.print(value5);
Serial1.print(",");
Serial1.print(value6);
Serial1.print(",");
Serial1.print(value7);
Serial1.print(",");
Serial1.print(value8);
Serial1.print(",");
Serial1.print(value9);
Serial1.print(",");
Serial1.print(value10);
Serial1.print(",");
Serial1.print(value11);
Serial1.print(",");
Serial1.println(value12);
delay(50);
}    

请指出我做错了什么。任何帮助将不胜感激。

错误:

错误

该消息表明它是通过values= obj.readline().split(',')解析串行端口。最初我认为问题可能是 Arduino 打印"\r",而您用 readline 解析的行结尾只是"",但我想这应该可以工作,你只会留下"\r"在你的value[11](这可能会导致 SQL 问题(。但是我认为索引问题可能是由于字符串编码造成的。

试试这个:values = obj.readline().rstrip().decode().split(',')

仅供参考,如果您从终端复制+粘贴错误消息而不是图片,人们对人们来说更方便。

最新更新