Уведомления

Группа в Telegram: @pythonsu

#1 Июль 28, 2019 15:04:37

shiyri
Зарегистрирован: 2019-07-09
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

raspberry pi + arduino

Добрый день, подскажите в чем ошибка.
в терминале набираю:
>>> 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
ничего не происходит

Офлайн

#2 Июль 28, 2019 19:12:47

shiyri
Зарегистрирован: 2019-07-09
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

raspberry pi + arduino

Получился рабочий вариант:
import serial
port = serial.Serial(“/dev/ttyUSB1”, baudrate=9600, timeout=3.0)
while True:
port.write(“9”)
exit()
но ардуинка зависает
что делать?

Офлайн

#3 Авг. 2, 2019 09:39:22

shiyri
Зарегистрирован: 2019-07-09
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

raspberry pi + arduino

Выше уже не актуально, сделал реле напрямую из малины, теперь надо считать аналоговый датчик холла
через 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:
то скрипт в малине виснет.
помогите пожалуста!!!!

Офлайн

#4 Авг. 2, 2019 13:19:45

shiyri
Зарегистрирован: 2019-07-09
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

raspberry pi + arduino

Короче такая бодяга получилась Хвала гуглу……


 #!/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()

Офлайн

#5 Авг. 2, 2019 13:21:39

shiyri
Зарегистрирован: 2019-07-09
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

raspberry pi + arduino

Теперь надо запустить файлик питон из 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);
?>

Офлайн

#6 Авг. 2, 2019 19:51:39

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

raspberry pi + arduino

shiyri
Теперь надо запустить файлик питон из php чот не получается
Это вам на форум по php. Но и там наверняка потребуется лог ошибки.

Записать данные в sqlite можно из питона встроенными в питон средствами.
https://docs.python.org/3/library/sqlite3.html

Будет короче чем ваша портянка и можно код записи в базу и получение данных совместить. Это всегда проще чем делать это средствами ос.

 int(ch.encode('hex'),16)
Это вы изобразили
 ord(ch)
?

 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)



Отредактировано doza_and (Авг. 2, 2019 20:15:08)

Офлайн

#7 Авг. 3, 2019 10:31:52

shiyri
Зарегистрирован: 2019-07-09
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

raspberry pi + arduino

СПАСИБО

/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’


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

Офлайн

#8 Авг. 3, 2019 10:33:30

shiyri
Зарегистрирован: 2019-07-09
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

raspberry pi + arduino

из терминала под sudo запускается, а через php может

Офлайн

#9 Авг. 3, 2019 16:07:08

shiyri
Зарегистрирован: 2019-07-09
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

raspberry pi + arduino

  ord(ch)
Ошибка
File “mg.py”, line 19, in <module>
mag = int(ch.encode('hex'),16)/100000-30
AttributeError: ‘bytes’ object has no attribute ‘encode’
это считывание nfs кода с метки

Офлайн

#10 Авг. 3, 2019 19:50:00

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

raspberry pi + arduino

:)

shiyri
Ошибка
Угу ошибка. Вопрос то в чем?
Может это поможет?
https://www.youtube.com/watch?v=8HdQlIFILtY

Это иллюстрация методов начинающего программиста на питоне, основные ошибки.



Отредактировано doza_and (Авг. 3, 2019 19:50:46)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version