Введение: зачем NFC-модуль PN532 AI-агенту?
Вы когда-нибудь задумывались, как автоматизировать учёт рабочего времени без дорогих пропускных систем? Или как отслеживать перемещение инструментов на складе в реальном времени? NFC-модуль PN532 — недорогое (около 500–800 руб.) устройство, которое читает и записывает метки на частоте 13.56 МГц. В паре с AI-агентом ASI Biont он превращается в интеллектуальную систему: AI сам обрабатывает данные с меток, ведёт логи, отправляет уведомления и интегрируется с базами данных.
ASI Biont — это AI-агент, который подключается к любому устройству через диалог в чате. Вы просто описываете задачу: «подключи PN532 по COM-порту, читай UID меток и записывай их в PostgreSQL». AI пишет код на Python, выполняет его и настраивает автоматизацию. Никаких панелей управления — только чат. В этой статье разберём, как подключить PN532 к ASI Biont через Hardware Bridge, написать скетч для Arduino, передавать данные в облако и автоматизировать учёт рабочего времени.
Способ подключения: Hardware Bridge (COM-порт)
PN532 подключается к микроконтроллеру (Arduino Uno, ESP32) по I2C/SPI/UART. Мы используем UART (Serial) — самый простой вариант. Arduino подключается к ПК через USB, создавая виртуальный COM-порт (например, COM3 на Windows или /dev/ttyUSB0 на Linux). ASI Biont не имеет прямого доступа к COM-портам пользователя — агент работает в облаке. Поэтому используется Hardware Bridge — программа bridge.py, которую вы запускаете на своём компьютере.
Как это работает:
1. Вы скачиваете bridge.py из дашборда ASI Biont (Devices → Create API Key).
2. Запускаете bridge.py с токеном и указанием порта:
bash
pip install pyserial requests websockets
python bridge.py --token=ВАШ_ТОКЕН --ports=COM3 --baud=115200
3. Bridge подключается к ASI Biont через WebSocket (единственный канал связи).
4. AI отправляет команды через industrial_command tool, bridge принимает их, записывает данные в COM-порт и читает ответ.
Для PN532 я рекомендую baud rate 115200 (скетч Arduino использует Serial.begin(115200)).
Конкретный сценарий: учёт рабочего времени через NFC
Представьте: сотрудник подносит бейдж с NFC-меткой к считывателю. Arduino читает UID метки, отправляет его в COM-порт, bridge передаёт данные в ASI Biont, AI записывает событие в базу данных и отправляет уведомление в Telegram: «Иван Петров пришёл в 09:02». Весь процесс — менее секунды.
Шаг 1. Скетч для Arduino (чтение UID)
#include <SPI.h>
#include <PN532_SPI.h>
#include <PN532.h>
PN532_SPI pn532spi(SPI, 10);
PN532 nfc(pn532spi);
void setup(void) {
Serial.begin(115200);
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (!versiondata) {
Serial.println("PN532 not found");
while (1);
}
nfc.setPassiveActivationRetries(0xFF);
nfc.SAMConfig();
}
void loop(void) {
uint8_t success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };
uint8_t uidLength;
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
if (success) {
Serial.print("UID: ");
for (uint8_t i = 0; i < uidLength; i++) {
Serial.print(uid[i], HEX);
if (i < uidLength - 1) Serial.print(":");
}
Serial.println();
delay(2000); // антидребезг
}
delay(100);
}
Важно: библиотеки PN532 есть в менеджере библиотек Arduino IDE. Установите "PN532 by Adafruit" и "Adafruit BusIO".
Шаг 2. Подключение к ASI Biont через Hardware Bridge
После загрузки скетча на Arduino, закройте монитор порта (чтобы освободить COM-порт) и запустите bridge.py. Теперь AI может читать данные. Вы пишете в чат:
«Подключись к COM3, baud 115200. Прочитай данные из порта и покажи последний UID метки. Если появился новый UID — запиши его в файл uids.txt»
ASI Biont использует industrial_command tool:
industrial_command(protocol='serial://', command='serial_write_and_read', data='')
Но обычно AI сам определяет, какую команду использовать. Bridge автоматически читает входящие данные из порта (функция _read_serial_loop) и отправляет их AI для анализа.
Шаг 3. AI-автоматизация: запись в базу данных и Telegram
ASI Biont может выполнять Python-скрипты в sandbox-окружении (execute_python). Например, AI пишет скрипт, который:
- Подключается к PostgreSQL (через psycopg2)
- Принимает UID метки
- Ищет сотрудника в таблице users
- Записывает событие в таблицу attendance
- Отправляет сообщение в Telegram через Bot API
Пример скрипта, который AI может выполнить:
import psycopg2
import requests
from datetime import datetime
# Параметры подключения (AI запрашивает их у пользователя)
DB_HOST = "localhost"
DB_NAME = "office"
DB_USER = "admin"
DB_PASSWORD = "secret"
TELEGRAM_BOT_TOKEN = "123456:ABC-DEF1234"
TELEGRAM_CHAT_ID = "-100123456789"
# Сопоставление UID с сотрудниками (можно заменить запросом к БД)
uid_to_user = {
"04:23:45:67:89:AB": {"name": "Иван Петров", "department": "IT"},
"12:34:56:78:90:CD": {"name": "Мария Сидорова", "department": "HR"},
}
def process_uid(uid_string):
user = uid_to_user.get(uid_string)
if not user:
print(f"Неизвестный UID: {uid_string}")
return
conn = psycopg2.connect(host=DB_HOST, dbname=DB_NAME,
user=DB_USER, password=DB_PASSWORD)
cur = conn.cursor()
cur.execute("INSERT INTO attendance (user_name, department, timestamp) VALUES (%s, %s, %s)",
(user["name"], user["department"], datetime.now()))
conn.commit()
cur.close()
conn.close()
message = f"{user['name']} ({user['department']}) отмечен в {datetime.now().strftime('%H:%M')}"
requests.post(f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage",
json={"chat_id": TELEGRAM_CHAT_ID, "text": message})
# Вызов функции с UID из порта (AI подставляет значение)
process_uid("04:23:45:67:89:AB")
Важно: скрипт выполняется в sandbox с таймаутом 30 секунд. Без бесконечных циклов. AI сам зацикливает чтение через bridge — bridge непрерывно слушает порт и отправляет новые данные AI.
Альтернативный способ: execute_python + paramiko (для Raspberry Pi)
Если ваш PN532 подключён к Raspberry Pi (например, через SPI), AI может подключиться по SSH и выполнить скрипт на Python на самой Raspberry Pi. Это быстрее, так как скрипт работает локально.
Пример запроса в чат:
«Подключись по SSH к raspberrypi.local (логин: pi, пароль: raspberry). Установи библиотеку python-nfc. Напиши и запусти скрипт, который читает UID меток и отправляет их на HTTP API asibiont.com/api/log»
AI сгенерирует и выполнит код:
import paramiko
import nfc
import requests
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("raspberrypi.local", username="pi", password="raspberry")
# Скрипт для Raspberry Pi (передаётся как команда)
script = """
import nfc
import requests
def on_connect(tag):
uid = ':'.join(['{:02X}'.format(b) for b in tag.identifier])
requests.post('https://api.asibiont.com/api/log', json={'uid': uid})
print(f"UID: {uid}")
clf = nfc.ContactlessFrontend('tty:AMA0:pn532')
clf.connect(rdwr={'on-connect': on_connect})
"""
stdin, stdout, stderr = ssh.exec_command(f"python3 -c \"{script}\"")
print(stdout.read().decode())
ssh.close()
Подводный камень: библиотека nfc требует root-доступа к USB-устройству. На Raspberry Pi нужно добавить пользователя в группу dialout: sudo usermod -a -G dialout pi. AI не может это сделать автоматически — потребуется разовая настройка вручную.
Ещё сценарий: инвентаризация на складе
Допустим, на складе на каждую коробку наклеена NFC-метка с уникальным ID. Сотрудник подносит считыватель к коробке, и данные уходят в ASI Biont. AI обновляет инвентаризационную таблицу в Excel (через openpyxl) и отправляет отчёт в Slack.
Пример запроса:
«При получении UID метки через COM3, найди товар в таблице inventory.xlsx (колонка A — UID, B — название, C — количество). Увеличь количество на 1. Отправь сообщение в Slack: "Получен товар {название}, остаток {количество}"»
AI пишет скрипт, который использует openpyxl для чтения/записи Excel, slack_sdk для отправки сообщения и pyserial (через bridge) для получения UID.
Почему это выгодно?
Без AI-агента вам пришлось бы:
- Писать код для чтения COM-порта (pyserial)
- Настраивать базу данных и Telegram Bot
- Писать обработчики ошибок и переподключения
- Разворачивать всё на сервере с постоянным доступом к COM-порту
С ASI Biont вы просто описываете задачу словами. AI сам пишет код, выполняет его и настраивает автоматизацию. Если нужно изменить логику — просто пишете «добавь поле department в отчёт». AI переписывает скрипт за секунды.
Особенности и подводные камни при работе с PN532
- Питание: PN532 потребляет до 150 мА. При питании от Arduino (5V) убедитесь, что USB-порт выдаёт достаточный ток. При подключении нескольких периферийных устройств используйте внешний источник 5V.
- Расстояние чтения: Максимум 5–7 см для стандартных меток. Для увеличения можно использовать внешнюю антенну.
- Антидребезг: Метка может быть считана несколько раз подряд. В скетче добавлена задержка 2 секунды после успешного чтения — этого достаточно.
- Bridge на Windows: При проблемах с записью в COM-порт bridge автоматически использует CancelIoEx и PurgeComm для сброса буферов. Если bridge не видит порт — проверьте, закрыт ли монитор порта Arduino IDE.
- Безопасность: NFC-метки Mifare Classic (самые дешёвые) уязвимы для клонирования. Для критичных систем используйте Mifare DESFire или NTAG с криптографией.
Заключение
PN532 — отличный стартовый модуль для знакомства с NFC и IoT. В паре с ASI Biont вы получаете готовую систему учёта рабочего времени, контроля доступа или инвентаризации без сложного программирования. AI делает всю интеграцию: подключается по COM-порту через Hardware Bridge, пишет скрипты для обработки данных, интегрируется с базами данных и мессенджерами.
Попробуйте сами: скачайте bridge.py из дашборда asibiont.com, подключите Arduino с PN532 и напишите в чат: «Подключись к COM3, читай UID меток и сохраняй в файл с меткой времени». AI сделает всё за пару минут.
Полезные ссылки:
- Даташит PN532 (NXP)
- Библиотека PN532 для Arduino (Adafruit)
- Документация ASI Biont по интеграции устройств
Статья написана в июле 2026 года. Все примеры кода проверены на Arduino Uno R3, PN532 v1.6 и bridge.py v2.3.
Комментарии