Правильные показания датчика не записаны в базу данных - PullRequest
0 голосов
/ 18 февраля 2020

У меня Arduino MKR1000, настроенный с датчиком освещенности, который в основном обеспечивает логическое значение в зависимости от того, светлый он или темный.

{
  pinMode(6, INPUT);
}

void loop()
{
  bool gotLight = (digitalRead(6) == LOW);
  String PostDataTrue = "TRUE";
  String PostDataFalse = "FALSE";

  if (gotLight == 1) {
  Serial.println(PostDataTrue);
  delay(1000); 
  }

  if (gotLight == 0) {
  Serial.println(PostDataFalse);
  delay(1000); 
  }

}

Когда я запускаю последовательный монитор, я вижу, что он правильно отображать показания, которые меняются в зависимости от того, освещаю я датчик или нет.

Однако сценарий python, который я использую для записи этих значений в Postgres БД, кажется, застрял на определенные значения. Например, хотя последовательный монитор может быть готов ИСТИНА, ЛОЖЬ, ИСТИНА, если я закрою и открою датчик. То, что заканчивается в таблице, будет ИСТИНА, ИСТИНА, ИСТИНА.

Значения, которые заканчиваются в таблице, различаются между ИСТИНОЙ и ЛОЖЬЮ, но обычно происходит следующее: начинается чтение ИСТИНА, ИСТИНА, ИСТИНА, и др c. пока я не закрою датчик, он будет правильно читать FALSE, FALSE, FALSE и т. д. c., но когда я раскрою датчик, он все равно будет вставлять FALSE в таблицу.

Я публикую свой код python ниже. Был бы признателен, если бы кто-то мог указать мне на то, что вызывает это.

import serial
import psycopg2
import datetime
import time

# Initiate the serial connection to the Arduino device.
try:
    ser = serial.Serial('/dev/cu.usbmodem14401', 115200, timeout=1)
    # Brief pause to establish connection to port.
    time.sleep(3)
except Exception as e:
    print(e)
    exit(1)

def insert_data(dt, s1):
    '''Insert data into the database.'''
    conn = psycopg2.connect('''
                            [my connection string info here]
                            ''')
    cur = conn.cursor()
    cur.execute('''INSERT INTO lightbool
                (date_time, sensor1)
                VALUES (%s, %s)''', (dt, s1))
    conn.commit()
    conn.close()


def read_sensors():
    '''Read the sensors connected to Arduino device.'''
    global sensor1
    # When the Arduino receives the character 'z' it will read the sensor data.
    ser.write(b'z')
    try:
        data = ser.readline().decode('utf-8')
        data = data.split()
        sensor1 = data[0]
        print("{} {} {}".format(sensor1))
        return (sensor1)
    except Exception as e:
        print(e)
        return


while True:
    # Get the current date and time from the datetime module.
    time_now = datetime.datetime.today()
    date_time = datetime.datetime.strftime(time_now, "%Y-%m-%d %H:%M:%S")
    read_sensors()
    print(date_time, sensor1)
    # Save data in a Postgresql database.
    insert_data(date_time, sensor1)
    # Pause a few seconds.
    time.sleep(3)


ser.close()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...