LINUX.ORG.RU

Работа с ком портом питоне

 , ,


1

3

Продолжаю осваивать питон

Накропал скрипт для лога данных с сенсора в БД

Железка определяется как

Bus 007 Device 007: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light 
Сразу - это не ардуина, а китайская хитрая железяка...

#!/usr/bin/python
import os
import time
import serial
import MySQLdb

#подключаем к БД
db = MySQLdb.connect(host="127.0.0.1", 
                     port=3306,
                     user="user",
                      passwd="password",
                      db="air") 
cur = db.cursor()

ser = serial.Serial( '/dev/ttyUSB0', 9600, timeout=10 )

a = 1

#начинаем читать
while a == 1:
	s = ser.readline()
	sa = s.split(',')
	if len(sa) == 8:
		pm25 = float(sa[0])
		pm10 = float(sa[1])
		hcho = float(sa[2])
		voc = float(sa[3])
		co2 = float(sa[4])
		temp = float(sa[5])
		humidity = float(sa[6])
		summ = float(sa[7])
		unixtime = long(time.time())
#первые несколько  значений вылетают с нулями по пыли, так что их отбрасываем и ждем  нормальных данных с ненулевой пылью
		if pm25 != 0 and pm10 != 0:
			a = 10
			cur.execute( 
			'INSERT INTO data '
	    	'(unixtime, pm25, pm10, hcho, voc, co2, temp, humidity)'
	    	'VALUES'
	    	'(%s, %s, %s, %s, %s, %s, %s, %s)',
	    	(unixtime, pm25, pm10, hcho,  voc,  co2, temp, humidity))        
        	db.commit()
			
db.close()
print('end')

Из неприятных минусов - железка перезагружается. Помогите побороть эту бяку.

★★★

Последнее исправление: kombrig (всего исправлений: 1)

Когда работает эта программа то перезагружается, а если просто minicom натравить - то не перезагружается?

I-Love-Microsoft ★★★★★
()

Где-то эти прекрасные макароны:

if len(sa) == 8:
		pm25 = float(sa[0])
		pm10 = float(sa[1])
		hcho = float(sa[2])
		voc = float(sa[3])
		co2 = float(sa[4])
		temp = float(sa[5])
		humidity = float(sa[6])
		summ = float(sa[7])
		unixtime = long(time.time())

и этот тред я уже видел.

DejaVu.ttf

P.S.

а китайская хитрая железяка... перезагружается

китайская

перезагружается

Я думаю, что проблема где-то тут. На неё документация есть? Софт с ней какой идёт? Попробуй реверсни и посмотри как с ней работают.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Железка -суровый китайский самопал. Документации нет, софта нет. Населена роботами. Вот она если что. mysku.ru/blog/taobao/40456.html Ребут идет именно по запуску скрипта. Гугл показывает аналогичную проблему с ардуиной, но там хардварное решение -тупо воткнуть конденсатор между пинами

kombrig ★★★
() автор топика
Последнее исправление: kombrig (всего исправлений: 1)

начни с устранения причин перезагрузки.

скорость работы устройство действительно 9600?

вообще если какой тулой вообще посмотреть чё с порта приходит - на какой скорости?

может твой скрипт ненароком просто вычитывает тоны не формата - чисто для себя попробуй посмотреть чё в s = ser.readline() приходит и печатай для себя.

qulinxao ★★☆
()

Чтение никак не должно влиять на работу железки. Может у тебя там коротит чего? Питание проверяй. Попробуй конденсатор микрофарад на 100 воткнуть между плюсом и минусом питания, если в железке нет такого. Можно больше.

Пара замечаний.

unixtime = long(time.time())

long — в моём питоне такого нет.

while a == 1:
    ...
    a = 10

Я бы так написал:

while True:
    s = ser.readline()
    sa = s.split(',')
    
    if len(sa) != 8:
        raise Exception('Wrong params count')
        # or 'continue'

    pm25 = float(sa[0])
    pm10 = float(sa[1])
    
    if pm25 and pm10:
        t = time.time()
        data = tuple([t] + sa[:-1])

        cur.execute(
            'INSERT INTO data '
            '(unixtime, pm25, pm10, hcho, voc, co2, temp, humidity) '
            'VALUES (%s, %s, %s, %s, %s, %s, %s, %s)', data)
        db.commit()

        break

anonymous
()
Ответ на: комментарий от kombrig

Попробуй выяснить, после какого вызова происходит ресет.

У меня он происходил про открытии порта.

//мимо-ардуинщик

anonymous
()
Ответ на: комментарий от qulinxao

Я не спец по железкам. Но она выдает в csv данные. В виде строки данных через запятую.

По крайней мере я так понял. Если можешь подскажи чем и как посмотреть чем плюется железка.

kombrig ★★★
() автор топика
Ответ на: комментарий от kombrig

Ты уже проверил что с программами типа minicom всё нормально работает и не резетится? И лишь только с твоей программой так.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от kombrig

А если чего-нибудь туда послать, тоже ресетится?

anonymous
()
Ответ на: комментарий от kombrig

крч у питона же интерактивная среда есть

если вручную подключаешься то всё видимо ок?

попробуй ну просто счётчик числа прочитаных строк воткнуть и посмотреть после скольки рвёться соединение например.

(в порядке мозгового шторма)может вообще там у железки после некоторого обьёма ответа какие буферы сыпятся вот и ресетиться - али ещё какие глюки с «таймингами» и действительно попробуй какой «обычной»(т.е обще используемой в таковых задачах) тулзой посмотреть программно свою железку «по разговарий» с ней может до чего и уговоришь

qulinxao ★★☆
()
Ответ на: комментарий от I-Love-Microsoft

Проверил... оно ресетится на всем что пробовал: CuteCOM, SerialPlot

Проверил - ресетится оно по открытию порта...

Самый неприятный открытый момент - при чтении порта он сначала отдает кривые данные.

Соответсвенно вижу 2 варианта.

1. бесконечный цикл чтения данных и отбор нужных 2. вызов таки по крону, фильтрация медианой пачки считанных данных.

kombrig ★★★
() автор топика
Ответ на: комментарий от kombrig

Сейчас пытаюсь сделать регистрацию на qq (китайский месенджер) чтоб достать продавца

kombrig ★★★
() автор топика
Последнее исправление: kombrig (всего исправлений: 1)
Ответ на: комментарий от qulinxao

после скольки рвёться соединение например

tsya.ru (я не придираюсь, просто этот сайт поможет)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от gnunixon

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

kombrig ★★★
() автор топика

Короче, сделал я чтоб не перезапускался... правда велосипед еще тот.

Скрипт запустил в бесконечный цикл чтения т.е. открытие порта происходит всего 1 раз. а чтобы оно постоянно висело, запустил его через supervisor

kombrig ★★★
() автор топика

Из неприятных минусов - железка перезагружается.

ну так правильно, ты же подключаешся, у меня ардуино так же себя ведет

anonymous
()
Ответ на: комментарий от anonymous

правильно-неправильно. но мне такое поведение вредно.

kombrig ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.