Создайте свой собственный Lockitron с помощью Twilio, Arduino и Node.js

Автор: | 28.07.2026

Этот урок основан на мастер-классе, который я проводил на конференции Makerland в Польше. Он научит вас, как управлять замком с ригелем по беспроводной связи без повреждения или изменения самого замка. Мы будем использовать Arduino Uno, сервопривод и Node.js, чтобы вы могли запирать и отпирать дверь через SMS. Это вдохновлено удивительным устройством Lockitron, работающим на базе Twilio, которое, к счастью, не скреплено картоном и изолентой.

Детали

1. Замок

2. Изолента + Картон

3. Сервопривод (я использовал HS-322HD)

4. Arduino Uno + Кабель для программирования

**Подготовка системы**

1. Скачайте и установите Arduino IDE с http://arduino.cc/en/Main/Software.

2. Установите node.js с http://nodejs.org/

3. Установите утилиту ngrok с https://ngrok.com/download

Мы будем использовать Arduino IDE для написания и загрузки кода на вашу плату Arduino. Затем мы будем использовать скрипт node.js для связи с Arduino через последовательное соединение и ответа на запросы Twilio с помощью веб-сервера express. И, наконец, мы будем использовать ngrok, чтобы предоставить ваш веб-сервер express всему миру, чтобы Twilio мог отправлять входящие SMS-сообщения в ваше приложение.

Теперь мы готовы погрузиться в работу и начать подключать наш Arduino и соединять его с замком.

Мы будем использовать сервопривод для управления замком. Сервопривод — это тип двигателя, который обычно имеет радиус движения 180 градусов, что делает его идеальным для замка, который только поворачивается туда-обратно.

У сервопривода есть три провода — питание (красный), земля (черный) и управление (часто желтый или белый). Подключите провод питания к контакту 5V на Arduino, а провод земли к контакту GND рядом с ним. Затем мы можем подключить провод управления к цифровому контакту 12 на нашем Arduino, как показано на следующей схеме:

Вот и все! Теперь, когда наш сервопривод подключен к Arduino, мы можем прикрепить его к замку.

Я предпочитаю использовать бытовые предметы при прототипировании таких приложений, хотя если у вас есть доступ к 3D-принтеру, я бы порекомендовал спроектировать и напечатать собственное крепление для замка.

В целях прототипирования мы будем использовать картон и изоленту, чтобы прикрепить наш сервопривод к замку — прямо как астронавты!

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

Теперь используйте кусок картона (или другого жесткого материала), чтобы создать более прочную связь между сервоприводом и замком:

Теперь вы можете приклеить сервопривод к замку с ригелем. Убедитесь, что он расположен с правильной стороны, чтобы направление вращения сервопривода совпадало с направлением вращения замка:

И, наконец, мы приклеим рычаги нашего сервопривода к самому ригелю:

Теперь у вас есть полностью установленный (и полностью временный) замок с ригелем, управляемый сервоприводом:

После того как вы подключили Arduino и установили начальное программное обеспечение (Node.js и Arduino), вы можете выполнить следующую команду для установки необходимых модулей node.js для вашего скрипта. Обратите внимание, что если вы используете Windows, вам нужно будет следовать инструкциям по установке node-serialport для Windows.

npm install serialport twilio express

Node-Serialport упрощает связь с Arduino через последовательное соединение из программы Node.js. Мы будем использовать его для получения HTTP-запросов на входящие текстовые сообщения от Twilio и передачи инструкций Arduino для запирания или отпирания замка.

Express — это простая веб-инфраструктура node.js. А модуль twilio упрощает связь с API Twilio.

Прежде всего, мы можем настроить наш новый скетч Arduino, открыв Arduino IDE.

Для начала нам нужно открыть последовательное соединение со скоростью 9600 бод и подключиться к сервоприводу (на контакте 12).

Мы также сообщаем Arduino, что положение сервопривода 0 — это «заперто», а положение сервопривода 180 — «отперто». Возможно, вам придется поменять их местами в зависимости от того, как вы установили сервопривод на замок. При запуске Arduino мы указываем сервоприводу переместиться в положение «заперто».

Далее мы считываем символ из последовательного соединения, чтобы определить, следует ли нам перемещать сервопривод.

Входные данные, которые Arduino анализирует, поступают из нашего скрипта node.js, который мы напишем в следующем разделе.

Вне Arduino IDE создайте новый файл в любимом редакторе с именем nodelock.js и начните файл с подключения модулей, которые мы установили ранее с помощью npm:

Обратите внимание, что мы указываем, к какому USB-порту подключаться и какова скорость передачи данных. Возможно, вам потребуется изменить значение USB-порта на вашем компьютере. Вы можете найти имя вашего активного USB-порта в меню Arduino->Tools->Port.

Далее мы настроим наш HTTP-маршрут, называемый /sms

Мы указываем express принимать POST-запросы по маршруту /sms и анализировать тело POST с помощью его bodyParser, что упростит доступ к параметрам, отправленным входящим SMS Twilio. Мы добавляем промежуточное ПО twilio webhook, чтобы убедиться, что запрос действительно от Twilio (поскольку это случай использования, необходимый для безопасности)

Теперь, когда у нас есть маршрут для приема входящих SMS, мы захотим проверить, есть ли у номера, с которого отправлено сообщение, разрешение на запирание и отпирание двери.

Мы проверяем POST-параметр From и регистрируем, подтвержден он или нет. Мы проверяем не только номер телефона, с которого отправлено сообщение, но и тело сообщения, чтобы убедиться, что оно включает наш уникальный код (в данном случае это ABC123)

В блоке для подтвержденного номера мы теперь можем добавить обработчик для отправки и ответа на данные из последовательного соединения Arduino.

Это выглядит довольно объемно, но на самом деле происходит довольно просто. Мы настраиваем обработчик событий для получения последовательных данных от Arduino. Этот обработчик событий проверяет, отправил ли Arduino «U» или «L» — затем мы берем это значение и возвращаем SMS-ответ пользователю с помощью функции sendMessage (которую мы напишем в ближайшее время).

После настройки обработчика событий мы записываем «V» в последовательное соединение Arduino, чтобы сообщить ему, что получено подтвержденное SMS, и теперь он должен запереть/отпереть дверь.

Ближе к началу файла мы теперь можем создать нашу функцию sendMessage, которая принимает два аргумента — res и message:

sendMessage вызывается для генерации ответа TwiML для пользователя. TwiML — это подмножество XML, которое Twilio использует для передачи инструкций. В этом случае мы говорим Twilio ответить на полученное SMS-сообщение другим SMS-сообщением. Таким образом, пользователь может отправить «unlock», а мы можем ответить «Unlocking!» через SMS Twilio.

Теперь, когда наш обработчик SMS настроен, мы можем завершить наше приложение, открыв наш SerialPort и запустив наш веб-сервер Express:

И это весь наш код. Теперь, если вы загрузите скетч, который мы написали, в ваш Arduino и запустите скрипт nodelock.js, набрав node nodelock.js в терминале, мы будем готовы к работе.

Если вы столкнулись с ошибками и хотели бы сравнить с решением, вы можете проверить его здесь.

После того как вы создали или вошли в свою учетную запись Twilio, мы можем перейти к панели управления Twilio и нажать на вкладку Numbers. Затем нажмите на номер, на который вы хотите отправлять сообщения для управления замком.

Здесь есть два поля: Voice Request URL и Messaging Request URL. Мы будем использовать Messaging Request URL, чтобы сообщить Twilio, куда отправлять данные о входящих текстовых сообщениях.

Но поскольку Twilio общается через HTTP-запросы, нам понадобится общедоступный веб-URL, на который он сможет отправлять POST-запросы при получении SMS на ваш номер. Для этого мы будем использовать ngrok — утилиту, которую вы установили ранее.

После того как вы запустите свой сервер node.js с помощью node nodelock.js, откройте новое окно терминала и введите ./ngrok 3000 из каталога, в который вы установили ngrok. Здесь вам будет предоставлен URL переадресации, который позволяет внешним веб-сайтам безопасно получать доступ к вашему локальному работающему веб-серверу. Возьмите этот URL переадресации, добавьте к нему /sms и вставьте его в ваш Twilio Messaging Request URL на панели управления. Сохраните настройки вашего номера и попробуйте отправить на него SMS! Ваш замок должен запираться и отпираться, если вы установили подтвержденный номер как свой собственный.

Отличная работа и приятного хакинга!

Если у вас есть какие-либо вопросы или комментарии, не стесняйтесь писать в Twitter @jonmarkgo или на электронную почту jonmarkgo@twilio.com