У меня 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()