PicoIP Python библиотека за управление на пинове

PicoPI Python Library

Скрипта , който ще разгледаме в тази статия, представлява PicoIP Python библиотека за управление на пинове, ,която използва Simple Network Management Protocol (SNMP). Възможността да се задава IP адресът като параметър на заявките прави библиотеката изключително гъвкава и подходяща за различни мрежови конфигурации. Ще обсъдим структурата на кода, как да го използвате, както и причините, поради които библиотеката работи само под Linux.

Защо тази библиотека работи само под Linux?

Основната причина библиотеката да бъде ограничена само до Linux е използването на командите os.system() и os.popen() за извикване на SNMP команди (snmpset и snmpget). Тези команди са част от Net-SNMP пакета, който е широко разпространен и поддържан в Linux среда. Макар че съществуват версии за други операционни системи, като Windows, Linux предлага най-добра поддръжка и интеграция на тези инструменти.

За да използвате библиотеката, трябва да имате инсталиран Net-SNMP пакет на вашата Linux система:

sudo apt-get install snmp

Без този пакет, командите snmpset и snmpget, които библиотеката използва за комуникация с устройството, няма да функционират. Може да прочетете всичко за инсталацията и конфигурацията на SNMP тук.

PicoIP Python библиотека за управление на пинове

Тази библиотека е походяща за управление на хардуерни платформи, базирани на PicoIP. Може да разгледате нашите разработки на такива платформи в нашите страници:

import os
from time import sleep

community = "private"

# digitalWrite
def digitalWrite(ip_address, header, pin, value):
    oid = "1.3.6.1.4.1.19865.1.2.{0}.{1}.0".format(header, pin)
    command = "snmpset -v1 -Oqv -c {0} {1} {2} i {3}".format(community, ip_address, oid, value)
    os.system(command)

# digitalRead
def digitalRead(ip_address, header, pin):
    oid = "1.3.6.1.4.1.19865.1.2.{0}.{1}.0".format(header, pin)
    command = "snmpget -v1 -Oqv -c {0} {1} {2}".format(community, ip_address, oid)
    result = os.popen(command).read().strip()
    return result

# analogRead
def analogRead(ip_address, pin):
    oid = "1.3.6.1.4.1.19865.1.2.3.{0}.0".format(pin)
    command = "snmpget -v1 -Oqv -c {0} {1} {2}".format(community, ip_address, oid)
    result = os.popen(command).read().strip()
    return result


# digitalWrite("192.168.100.9", 1, 8, 1) # Порт Port P3 / JP3 ( pin 8 on )
# digitalWrite("192.168.100.9", 1, 8, 0) # Порт Port P3 / JP3 ( pin 8 off )

# digitalWrite("192.168.100.9", 2, 7, 1) # Порт Port P5 / JP4 ( pin 7 on )
# digitalWrite("192.168.100.9", 2, 7, 0) # Порт Port P5 / JP4 ( pin 7 off )

# digitalRead("192.168.100.9", 1 ,8) # Изчитане на дигитален вход на pin8 ( Port P3 / JP3 )
# digitalRead("192.168.100.9", 2 ,7) # Изчитане на дигитален вход на pin8 ( Port P5 / JP4 )

# analogRead("192.168.100.9", 1) # Изчитане на аналогов вход на ( pin 1 Port P6 / JP5 )
# analogRead("192.168.100.9", 2) # Изчитане на аналогов вход на ( pin 2 Port P6 / JP5 )
# analogRead("192.168.100.9", 3) # Изчитане на аналогов вход на ( pin 3 Port P6 / JP5 )

Структура на библиотеката

1. Конфигурация на SNMP community

community = "private"

Тази променлива задава SNMP community, което играе роля на парола за достъп до мрежовите устройства. В SNMP протокола, “community” определя нивото на достъп и контрол върху устройството. В този пример, community е зададено като “private“, което обикновено предоставя четене и писане на данни.

2. Функция digitalWrite

def digitalWrite(ip_address, header, pin, value):
    oid = "1.3.6.1.4.1.19865.1.2.{0}.{1}.0".format(header, pin)
    command = "snmpset -v1 -Oqv -c {0} {1} {2} i {3}".format(community, ip_address, oid, value)
    os.system(command)

Функцията digitalWrite служи за задаване на стойност на цифров пин на устройството.

  • ip_address: IP адресът на устройството, към което ще се изпрати командата.
  • header: Номерът на порта (1 за Port 3 (JP3) и 2 за Port 5 (JP4)).
  • pin: Номерът на конкретния пин (от 1 до 8).
  • value: Стойността, която искате да зададете (1 за включено и 0 за изключено).

Пример за използване:

digitalWrite("192.168.100.9", 1, 8, 1# Включва пин 8 на Port P3 / JP3
digitalWrite("192.168.100.9", 2, 7, 0# Изключва пин 7 на Port P5 / JP4

Тази функция генерира OID (Object Identifier), който е уникален идентификатор за устройството и пина, и изпраща съответната команда чрез snmpset.

3. Функция digitalRead

def digitalRead(ip_address, header, pin):
    oid = "1.3.6.1.4.1.19865.1.2.{0}.{1}.0".format(header, pin)
    command = "snmpget -v1 -Oqv -c {0} {1} {2}".format(community, ip_address, oid)
    result = os.popen(command).read().strip()
    return result

Функцията digitalRead служи за четене на състоянието на цифров пин.

  • ip_address: IP адресът на устройството, от което ще се изчете стойността.
  • header: Номерът на порта (1 за Port 3 (JP3) или 2 за Port 5 (JP4)).
  • pin: Номерът на пина (от 1 до 8).

Пример за използване:

state = digitalRead("192.168.100.9", 1, 8# Чете състоянието на пин 8 на порт P3 / JP3print(f"Състояние на пин 8 на порт P3: {state}")

Тази команда използва snmpget, за да изчете текущото състояние на пина, като стойността се връща като стринг, представляващ дали пинът е включен (1) или изключен (0).

4. Функция analogRead

def analogRead(ip_address, pin):
    oid = "1.3.6.1.4.1.19865.1.2.3.{0}.0".format(pin)
    command = "snmpget -v1 -Oqv -c {0} {1} {2}".format(community, ip_address, oid)
    result = os.popen(command).read().strip()
    return result

Функцията analogRead служи за четене на стойността от аналогов пин.

  • ip_address: IP адресът на устройството, от което ще се изчете стойността.
  • pin: Номерът на пина (от 1 до 8) на Port 6 (JP5).

Пример за използване:

analog_value=analogRead("192.168.100.9", 1)# Чете стойността на аналогов пин 1 на порт P6 / JP5
print(f"Стойност на аналогов пин 1: {analog_value}")

Тази функция също използва snmpget, но за разлика от digitalRead, тя изчита аналогови стойности, които могат да варират в диапазон (например от 0 до 1023).

Команди на PicoIP Python библитеката

Може да се запознаете с разположението на портовете и пиновете на тези платформи в нашия раздел ревюта:


digitalWrite("192.168.100.9", 1, 1, 1) # Порт Port P3 / JP3 ( pin 1 on )
digitalWrite("192.168.100.9", 1, 1, 0) # Порт Port P3 / JP3 ( pin 1 off )
digitalWrite("192.168.100.9", 1, 2, 1) # Порт Port P3 / JP3 ( pin 2 on )
digitalWrite("192.168.100.9", 1, 2, 0) # Порт Port P3 / JP3 ( pin 2 off )
digitalWrite("192.168.100.9", 1, 3, 1) # Порт Port P3 / JP3 ( pin 3 on )
digitalWrite("192.168.100.9", 1, 3, 0) # Порт Port P3 / JP3 ( pin 3 off )
digitalWrite("192.168.100.9", 1, 4, 1) # Порт Port P3 / JP3 ( pin 4 on )
digitalWrite("192.168.100.9", 1, 4, 0) # Порт Port P3 / JP3 ( pin 4 off )
digitalWrite("192.168.100.9", 1, 5, 1) # Порт Port P3 / JP3 ( pin 5 on )
digitalWrite("192.168.100.9", 1, 5, 0) # Порт Port P3 / JP3 ( pin 5 off )
digitalWrite("192.168.100.9", 1, 6, 1) # Порт Port P3 / JP3 ( pin 6 on )
digitalWrite("192.168.100.9", 1, 6, 0) # Порт Port P3 / JP3 ( pin 6 off )
digitalWrite("192.168.100.9", 1, 7, 1) # Порт Port P3 / JP3 ( pin 7 on )
digitalWrite("192.168.100.9", 1, 7, 0) # Порт Port P3 / JP3 ( pin 7 off )
digitalWrite("192.168.100.9", 1, 8, 1) # Порт Port P3 / JP3 ( pin 8 on )
digitalWrite("192.168.100.9", 1, 8, 0) # Порт Port P3 / JP3 ( pin 8 off )

digitalWrite("192.168.100.9", 2, 1, 1) # Порт Port P5 / JP4 ( pin 1 on )
digitalWrite("192.168.100.9", 2, 1, 0) # Порт Port P5 / JP4 ( pin 1 off )
digitalWrite("192.168.100.9", 2, 2, 1) # Порт Port P5 / JP4 ( pin 2 on )
digitalWrite("192.168.100.9", 2, 2, 0) # Порт Port P5 / JP4 ( pin 2 off )
digitalWrite("192.168.100.9", 2, 3, 1) # Порт Port P5 / JP4 ( pin 3 on )
digitalWrite("192.168.100.9", 2, 3, 0) # Порт Port P5 / JP4 ( pin 3 off )
digitalWrite("192.168.100.9", 2, 4, 1) # Порт Port P5 / JP4 ( pin 4 on )
digitalWrite("192.168.100.9", 2, 4, 0) # Порт Port P5 / JP4 ( pin 4 off )
digitalWrite("192.168.100.9", 2, 5, 1) # Порт Port P5 / JP4 ( pin 5 on )
digitalWrite("192.168.100.9", 2, 5, 0) # Порт Port P5 / JP4 ( pin 5 off )
digitalWrite("192.168.100.9", 2, 6, 1) # Порт Port P5 / JP4 ( pin 6 on )
digitalWrite("192.168.100.9", 2, 6, 0) # Порт Port P5 / JP4 ( pin 6 off )
digitalWrite("192.168.100.9", 2, 7, 1) # Порт Port P5 / JP4 ( pin 7 on )
digitalWrite("192.168.100.9", 2, 7, 0) # Порт Port P5 / JP4 ( pin 7 off )
digitalWrite("192.168.100.9", 2, 8, 1) # Порт Port P5 / JP4 ( pin 8 on )
digitalWrite("192.168.100.9", 2, 8, 0) # Порт Port P5 / JP4 ( pin 8 off )

digitalRead("192.168.100.9", 1 ,1) # Изчитане на дигитален вход на pin1 ( Port P3 / JP3 )
digitalRead("192.168.100.9", 1 ,2) # Изчитане на дигитален вход на pin2 ( Port P3 / JP3 )
digitalRead("192.168.100.9", 1 ,3) # Изчитане на дигитален вход на pin3 ( Port P3 / JP3 )
digitalRead("192.168.100.9", 1 ,4) # Изчитане на дигитален вход на pin4 ( Port P3 / JP3 )
digitalRead("192.168.100.9", 1 ,5) # Изчитане на дигитален вход на pin5 ( Port P3 / JP3 )
digitalRead("192.168.100.9", 1 ,6) # Изчитане на дигитален вход на pin6 ( Port P3 / JP3 )
digitalRead("192.168.100.9", 1 ,7) # Изчитане на дигитален вход на pin7 ( Port P3 / JP3 )
digitalRead("192.168.100.9", 1 ,8) # Изчитане на дигитален вход на pin8 ( Port P3 / JP3 )

digitalRead("192.168.100.9", 2 ,1) # Изчитане на дигитален вход на pin1 ( Port P5 / JP4 )
digitalRead("192.168.100.9", 2 ,2) # Изчитане на дигитален вход на pin2 ( Port P5 / JP4 )
digitalRead("192.168.100.9", 2 ,3) # Изчитане на дигитален вход на pin3 ( Port P5 / JP4 )
digitalRead("192.168.100.9", 2 ,4) # Изчитане на дигитален вход на pin4 ( Port P5 / JP4 )
digitalRead("192.168.100.9", 2 ,5) # Изчитане на дигитален вход на pin5 ( Port P5 / JP4 )
digitalRead("192.168.100.9", 2 ,6) # Изчитане на дигитален вход на pin6 ( Port P5 / JP4 )
digitalRead("192.168.100.9", 2 ,7) # Изчитане на дигитален вход на pin7 ( Port P5 / JP4 )
digitalRead("192.168.100.9", 2 ,8) # Изчитане на дигитален вход на pin8 ( Port P5 / JP4 )

analogRead("192.168.100.9", 1) # Изчитане на аналогов вход на ( pin 1 Port P6 / JP5 )
analogRead("192.168.100.9", 2) # Изчитане на аналогов вход на ( pin 2 Port P6 / JP5 )
analogRead("192.168.100.9", 3) # Изчитане на аналогов вход на ( pin 3 Port P6 / JP5 )
analogRead("192.168.100.9", 4) # Изчитане на аналогов вход на ( pin 4 Port P6 / JP5 )
analogRead("192.168.100.9", 5) # Изчитане на аналогов вход на ( pin 5 Port P6 / JP5 )
analogRead("192.168.100.9", 6) # Изчитане на аналогов вход на ( pin 6 Port P6 / JP5 )
analogRead("192.168.100.9", 7) # Изчитане на аналогов вход на ( pin 7 Port P6 / JP5 )
analogRead("192.168.100.9", 8) # Изчитане на аналогов вход на ( pin 8 Port P6 / JP5 )

Заключение

PicoIP Python библиотека за управление на пинове е удобна ако сте ентусиасти на Python програмирането. Това прави библиотеката особено полезна за IoT проекти и мрежова автоматизация, където управлението на множество устройства е ключово. Благодарение на използването на SNMP, библиотеката предлага сигурна и стандартизирана комуникация в Linux среда.

С този код можете лесно да четете и управлявате цифрови и аналогови пинове на PicoIP платформите, което го прави мощен инструмент за всяка автоматизирана система.