float和index超出范围问题的文字无效

时间:2017-08-16 19:57:25

标签: python flask arduino

我知道这个问题已被提出但我无法弄清楚这个问题。我正在使用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);
}    

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

错误:

error

1 个答案:

答案 0 :(得分:0)

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

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

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