我知道这个问题已被提出但我无法弄清楚这个问题。我正在使用Python Flask进行Web编程。我从Arduino IDE获取数据。因此,每当我运行Python程序时,它都会显示此错误,说明索引列表。加上有时浮动的文字无效。这是我的代码:
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);
}
请指出我做错了什么。任何帮助将不胜感激。
错误:
答案 0 :(得分:0)
该消息表明它是通过values= obj.readline().split(',')
解析串口。最初我认为问题可能是Arduino打印' \ r \ n'你用readline解析的结尾只是' \ n',但我想这应该有效,你只需留下' \ r'在value[11]
上(这可能会导致SQL问题)。但是我认为索引问题可能是由于字符串编码造成的。
试试这个:
values = obj.readline().rstrip().decode().split(',')
仅供参考,如果您从终端复制+粘贴错误消息而不是其中的图片,对人们来说会更方便。