shiyri
Июль 28, 2019 15:04:37
Добрый день, подскажите в чем ошибка.
в терминале набираю:
>>> import serial
>>> ser = serial.Serial('/dev/ttyUSB1')
>>> ser.write(b'9')
Передается цифра 9 в сериал по ЮСБ. И ардуинка не завершает цикл.
Если так то завершается.
>>> import serial
>>> ser = serial.Serial('/dev/ttyUSB1')
>>> ser.write(b'9')
1
>>> ser.close()
>>> ser.open()
но пытаюсь сделать файл run.py с тем же содержимым и запустить из консоли как:
python run.py
ничего не происходит
shiyri
Июль 28, 2019 19:12:47
Получился рабочий вариант:
import serial
port = serial.Serial(“/dev/ttyUSB1”, baudrate=9600, timeout=3.0)
while True:
port.write(“9”)
exit()
но ардуинка зависает

что делать?
shiyri
Авг. 2, 2019 09:39:22
Выше уже не актуально, сделал реле напрямую из малины, теперь надо считать аналоговый датчик холла
через USB serial:
import serial
s = serial.Serial('/dev/ttyUSB0')
s.write = (str(“ATI\r\n”)).encode(“utf-8”)
while True:
last = ''
for byte in s.read(s.inWaiting()): last += chr(byte)
Вот так получилось, но тут вопрос, раз данные передаются в byte как мне их потом обрадатывать в int?
Мне необходимо сделать цикл while конечным, что б он когда то заканчивался, и прерывался, если делаю
var = 0
while var < 0:
то скрипт в малине виснет.
помогите пожалуста!!!!
shiyri
Авг. 2, 2019 13:19:45
Короче такая бодяга получилась Хвала гуглу……
#!/usr/bin/python
import serial
import time
import RPi.GPIO as GPIO
import requests
import sys
opcl = sys.argv[1]
prop = str(sys.argv[2])
GPIO.setmode(GPIO.BOARD)
GPIO.setup(33,GPIO.OUT)
GPIO.setup(35,GPIO.OUT)
GPIO.setup(37,GPIO.OUT)
GPIO.output(33,GPIO.HIGH)
GPIO.output(35,GPIO.HIGH)
GPIO.output(37,GPIO.HIGH)
ser = serial.Serial('/dev/ttyUSB1',9600)
ch = ser.readline()
mag = int(ch.encode('hex'),16)/100000-30
if int(opcl) < 8:
if (mag == 6):
ex = 4
elif (mag == 4):
ex = 3
else:
ex = 6
var = 0
while var < 30:
GPIO.output(33,GPIO.LOW)
GPIO.output(37,GPIO.LOW)
ch = ser.readline()
mag = int(ch.encode('HEX'),16)/100000-30
print(mag)
if (ex == mag):
GPIO.output(33,GPIO.HIGH)
GPIO.output(37,GPIO.HIGH)
GPIO.cleanup()
print (str(prop))
link = "http://localhost/vd.php?pr="+prop
f = requests.get(link)
print(f.text)
break;
exit()
var = var + 1
else:
GPIO.output(33,GPIO.HIGH)
GPIO.output(35,GPIO.HIGH)
GPIO.output(37,GPIO.HIGH)
GPIO.cleanup()
else:
if (mag < 4):
ex = 4
elif (mag > 5):
ex = 3
else:
ex = 6
var = 0
while var < 30:
GPIO.output(33,GPIO.LOW)
GPIO.output(37,GPIO.LOW)
ch = ser.readline()
mag = int(ch.encode('HEX'),16)/100000-30
print(mag)
if (ex == mag):
GPIO.output(33,GPIO.HIGH)
GPIO.output(37,GPIO.HIGH)
GPIO.cleanup()
print (str(prop))
link2 = "http://localhost/vihod.php?pr="+prop
f2 = requests.get(link2)
print(f2.text)
break;
exit()
var = var + 1
else:
GPIO.output(33,GPIO.HIGH)
GPIO.output(35,GPIO.HIGH)
GPIO.output(37,GPIO.HIGH)
GPIO.cleanup()
shiyri
Авг. 2, 2019 13:21:39
Теперь надо запустить файлик питон из php чот не получается……
<?php
require_once 'connection.php';
// Create connection
$conn = mysqli_connect($server, $user, $password, $database);
mysqli_query($conn,"SET CHARACTER SET 'utf8'");
mysqli_query($conn,"SET SESSION collation_connection ='utf8_unicode_ci'");
if (isset($_GET['pr'])) {
$pr = $_GET['pr'];
} else {
// Fallback behaviour goes here
}
$link = mysqli_connect($server, $user, $password, $database)
or die("Ошибка " . mysqli_error($link));
mysqli_query($link,"SET CHARACTER SET 'utf8'");
mysqli_query($link,"SET SESSION collation_connection ='utf8_unicode_ci'");
$query ="SELECT * FROM fio_table where (propusk='$pr')";
$result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link));
$rows = mysqli_num_rows($result); // количество полученных строк
echo $rows;
if ($rows < 1)
{
header("Location: zapr.php");
mysqli_free_result($result);
}
else {
$command = escapeshellcmd('python2.7 /var/www/html/mg.py 9 003'); ВОТ тут файлик
echo "Connected successfully";
$datey = date('Y-m-d H:i:s');
$datev = date('H:i:s');
$sql = "INSERT INTO prohod (propusk, status, data, time_vh) VALUES ('$pr', '00FF00', '$datey', '$datev')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
}
mysqli_close($conn);
header("Location: vh_time.php");
mysqli_close($link);
?>
doza_and
Авг. 2, 2019 19:51:39
shiyri
Теперь надо запустить файлик питон из php чот не получается
Это вам на форум по php. Но и там наверняка потребуется лог ошибки.
Записать данные в sqlite можно из питона встроенными в питон средствами.
https://docs.python.org/3/library/sqlite3.htmlБудет короче чем ваша портянка и можно код записи в базу и получение данных совместить. Это всегда проще чем делать это средствами ос.
Это вы изобразили
?
GPIO.setup(33,GPIO.OUT)
GPIO.setup(35,GPIO.OUT)
GPIO.setup(37,GPIO.OUT)
GPIO.output(33,GPIO.HIGH)
GPIO.output(35,GPIO.HIGH)
GPIO.output(37,GPIO.HIGH)
наверное понятнее
for i in [33,35,37]:
GPIO.setup(i,GPIO.OUT)
GPIO.output(i,GPIO.HIGH)
вот это принято писать по другому
if (mag == 6):
ex = 4
elif (mag == 4):
ex = 3
else:
ex = 6
ex = {6:4, 4:3}.get(mag,6)
shiyri
Авг. 3, 2019 10:31:52
СПАСИБО
/var/www/html/mg.py:10: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(33,GPIO.OUT) /var/www/html/mg.py:11: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(35,GPIO.OUT) /var/www/html/mg.py:12: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(37,GPIO.OUT) Traceback (most recent call last): File “/usr/lib/python3/dist-packages/serial/serialposix.py”, line 275, in open self.fd = os.open(self.portstr, os.O_RDWR|os.O_NOCTTY|os.O_NONBLOCK) PermissionError: Permission denied: ‘/dev/ttyUSB1’
During handling of the above exception, another exception occurred: Traceback (most recent call last): File “/var/www/html/mg.py”, line 16, in ser = serial.Serial('/dev/ttyUSB1',9600) File “/usr/lib/python3/dist-packages/serial/serialutil.py”, line 261, in __init__ self.open() File “/usr/lib/python3/dist-packages/serial/serialposix.py”, line 278, in open raise SerialException(“could not open port %s: %s” % (self._port, msg)) serial.serialutil.SerialException: could not open port /dev/ttyUSB1: Permission denied: ‘/dev/ttyUSB1’
Прав не хватает….. походу, есть мысль как дать права?
Первый раз с питоном и в програмировании вообще…..
shiyri
Авг. 3, 2019 10:33:30
из терминала под sudo запускается, а через php может
shiyri
Авг. 3, 2019 16:07:08
Ошибка
File “mg.py”, line 19, in <module>
mag = int(ch.encode('hex'),16)/100000-30
AttributeError: ‘bytes’ object has no attribute ‘encode’
это считывание nfs кода с метки
doza_and
Авг. 3, 2019 19:50:00
:)
shiyri
Ошибка
Угу ошибка. Вопрос то в чем?
Может это поможет?
https://www.youtube.com/watch?v=8HdQlIFILtYЭто иллюстрация методов начинающего программиста на питоне, основные ошибки.