Arduino команды: Список команд Arduino

AT-команды Bluetooth HC-05 — Описания, примеры, подключение к Arduino

Bluetooth модуль HC-05 подключается по шине UART и способен выполнять AT-команды. AT-команда это строка начинающаяся с букв «AT» (от английского attention — «внимание»). Модуль выполняет поступившую команду и отправляет обратно ответ (результат выполнения команды), который также является строкой. В Bluetooth модулях HC-05 каждая команда (как и ответ) должна заканчиваться символами перевода строки «\r\n».

Подключение:

  • Управлять Bluetooth модулем HC-05 можно либо с компьютера, либо через микроконтроллер, например, Arduino. Вывод RX модуля подключается к выводу TX, а вывод TX модуля подключается к выводу RX того устройства с которого он будет управляться.
  • Для подключения модуля к компьютеру (без микроконтроллеров) потребуется адаптер USB-UART, или адаптер RS232-UART, или программатор с выводами TX RX, вместо адаптера USB-UART можно использовать плату Arduino, как описано в статье Wiki — используем Arduino как USB — UART преобразователь.
    Для отправки команд в модуль потребуется установить программу терминал. Одним из таких терминалов является свободно распространяемая программа Termite с поддержкой Русского языка.
  • Для подключения модуля к Arduino можно воспользоваться аппаратной или программной шиной UART. При использовании аппаратной шины, модуль подключается к выводам TX и RX указанным на плате. При использовании программной шины, модуль подключается к назначаемым выводам TX и RX Arduino.

Настройка:

Модуль Bluetooth HC-05 сможет принимать команды только если правильно настроены следующие параметры последовательного порта:

  • Номер порта: Его можно узнать экспериментально, отключите адаптер или Arduino, посмотрите какие порты доступны. Подключите адаптер или Arduino и вновь посмотрите какие порты доступны. Появившийся порт и есть тот самый.
  • Скорость передачи данных:
    В обычном режиме, Bluetooth модуль HC-05 сохраняет последнюю установленную скорость передачи данных, но по умолчанию она равна 38400 бит/сек (редко 9600 бит/сек). Если обе скорости не подойдут, то смотрите примечание в конце статьи.
  • Параметры передачи данных: Модуль сохраняет последние установленные параметры передачи данных. Значения параметров по умолчанию: количество бит в пакете — 8, размер стопового бита = 1, без проверки чётности.
  • Передаваемый текст: Нужно установить пункт «добавлять символы CR & LF(NL)» это символы перевода строки «\r\n» которые Вы не сможете ставить самостоятельно в конце AT-команд.

Для настройки этих параметров в программе Termite, нажмите на кнопку «Настройки» (Settings). В том же окне можно установить Русский язык.

При использовании Arduino, номер порта указывается во вкладке «Инструменты». Параметры передачи данных используются по умолчанию. Для добавления символов NL & CR воспользуйтесь меню в правом нижнем углу монитора последовательного порта.

Проверка:

После каждого подключения питания или перезагрузки модуля, до того как отправлять команды, нужно кратковременно нажать на кнопку модуля. Если у модуля нет кнопки, то кратковременно подать высокий уровень на вывод K. После чего модуль останется в обычном режиме, но будет воспринимать AT-команды. Помимо обычного режима, модуль может работать в режиме AT-команд. О том как войти в этот режим и чем он отличается от обычного, рассказано ниже, в разделе примечание.

Для проверки связи с Bluetooth модулем отправьте тестовую команду AT (введите текст

AT и нажмите Enter). Если связь установлена корректно, то модуль ответит OK. После этого можно отправлять остальные AT-команды.

AT-команды:

Если в программе терминал указано добавлять символы CR & LF или NL & CR то символы «\r\n» в командах ставить не нужно!
Команды могут быть обычными: AT+КОМАНДА\r\n, запросами: AT+КОМАНДА?\r\n, или установками: AT+КОМАНДА=ПАРАМЕТР(Ы)\r\n.

AT-команда: Ответ: Назначение:
AT AT\r\n OK\r\n Команда Тест:
Используется для проверки связи с модулем.
RESET AT+RESET\r\n OK\r\n Команда программной перезагрузки модуля:

Модуль ведёт себя так, как после кратковременного отключения питания.
VERSION AT+VERSION?\r\n +VERSION:ВЕРСИЯ\r\n
OK\r\n
Запрос версии прошивки модуля:
Модуль возвращает версию в виде строки до 32 байт.
Пример ответа: +VERSION:hc01.comV2.1\r\nOK\r\n
AT+ORGL AT+ORGL\r\n OK\r\n Сброс пользовательских настроек:
Модуль сбрасывает следующие настройки:
CLASS=0, IAC=9e8b33, ROLE=0, CMODE=0, UART=38400,0,0, PSWD=1234, NAME=hc01.com.
ADDR AT+ADDR?\r\n +ADDR:АДРЕС\r\n
OK\r\n
Запрос адреса модуля:
Модуль возвращает три части своего адреса NAP:UAP:LAP разделённые двоеточием.

Каждая часть состоит из шестнадцатиричных цифр.
Пример ответа: +ADDR:1234:56:789ABC\r\nOK\r\n
NAME AT+NAME?\r\n +NAME:ИМЯ\r\n
OK\r\n
Запрос / установка имени модуля:
Имя модуля представлено строкой до 32 байт.
Пример ответа: +NAME:iArduino\r\nOK\r\n
Пример установки: AT+NAME=iArduino\r\n
Некоторые модули реагируют на команду AT+NAME?\r\n только при нажатой кнопке модуля или наличии высокого уровня на входе K.
AT+NAME=ИМЯ\r\n OK\r\n
RNAME AT+RNAME? АДРЕС\r\n +RNAME:ИМЯ\r\n
OK\r\n
Запрос имени найденного Bluetooth устройства:
Адрес вводится после пробела, а части адреса (NAP,UAP,LAP) разделены запятой. Модуль возвращает имя найденного Bluetooth устройства находящегося в зоне действия, адрес которого был в запросе.

Пример запроса: AT+NAME? 1234,56,789ABC\r\n
Пример ответа: +RNAME:iArduino\r\nOK\r\n
ROLE AT+ROLE?\r\n +ROLE:РОЛЬ\r\n
OK\r\n
Запрос / установка роли модуля:
Роль модуля представлена цифрой:
0 — ведомый, 1 — ведущий, 2 — ведомый в цикле*.
Пример ответа: +ROLE:1\r\n
Пример установки: AT+ROLE=0\r\n
AT+ROLE=РОЛЬ\r\n OK\r\n
CLASS AT+CLASS?\r\n +CLASS:ТИП\r\n
OK\r\n
Запрос / установка типа устройства:
Тип устройства представляется 32 битным числом, по которому можно определить назначение модуля: Bluetooth клавиатура, Bluetooth мышь, гарнитура …
Пример установки: AT+CLASS=0\r\n
AT+CLASS=ТИП\r\n OK\r\n
IAC AT+IAC?\r\n +IAC:КОД\r\nOK\r\n Запрос / Установка кода общего доступа GIAC:
Код представлен 32 битным числом и используется для обнаружения Bluetooth устройств.
В роли ведущего, по данному коду модуль будет получать доступ к другим Bluetooth устройствам для их поиска (опроса), а в роли ведомого по данному коду будет предоставляться доступ для опроса модуля другими ведущими.
Пример ответа: +IAC:9e8b33\r\nOK\r\n
Пример установки: AT+IAC=9e8b33\r\n
AT+IAC=
КОД\r\n
OK\r\n
или
FAIL\r\n
INQM AT+INQM?\r\n +INQM:РЕЖИМ,КОЛ,ВРЕМЯ\r\n
OK\r\n
Запрос / Установка режима опроса модулей:
Используемые параметры являются настройками для команды поиска (опроса) других Bluetooth устройств.
— Режим поиска представлен цифрой:
0-стандартный, 1-поиск по интенсивности сигнала.
— Количество представлено цифрой определяющей предельное количество найденных Bluetooth устройств, после которого требуется прекратить поиск.
— Время поиска задаёт таймаут после которого поиск прекращается. Реальное время поиска в секундах равно указанному числу умноженному на 1,28.
Пример ответа: +INQM:1,1,48\r\nOK\r\n
Пример установки: AT+INQM:1,1,48\r\n
AT+INQM=РЕЖИМ,КОЛ,ВРЕМЯ\r\n OK\r\n
или
FAIL\r\n
PSWD AT+PSWD?\r\n +PSWD:КОД\r\n
OK\r\n
Запрос / Установка PIN-кода:
Код доступа представлен строкой до 16 байт.
Код модуля в роли ведомого устройства является паролем доступа к текущему модулю.
Код модуля в роли ведущего устройства является паролем доступа к внешним Bluetooth устройствам.
Пример ответа: +PSWD:1234\r\nOK\r\n
Пример установки: AT+PSWD=1234arduino\r\n
AT+PSWD=КОД\r\n OK\r\n
UART AT+UART?\r\n +UART:СКОР,СТОП,ПРОВ\r\n
OK\r\n
Запрос / установка скорости UART:
Скорость представлена числом бит/сек
Стоп бит представлен цифрой: 0 — один, 1 — два
Проверка представлена цифрой: 0 — без проверки,
1 — проверка нечётности, 2 — проверка чётности.
Пример ответа: +UART:38400,0,0\r\nOK\r\n
Пример установки: AT+UART=38400,0,0\r\n
AT+UART=СКОР,СТОП,ПРОВ\r\n OK\r\n
CMODE AT+CMODE?\r\n +CMOD:РЕЖИМ\r\n
OK\r\n
Запрос / установка режима подключения:
Режим представлен цифрой:
0 — модуль в роли ведущего подключается только к тому Bluetooth устройству, адрес которого указан командой AT+BIND.
1 — модуль в роли ведущего подключается к любому ведомому Bluetooth устройству.
2 — модуль в роли ведомого работает в цикле*
Пример ответа: +CMOD:0\r\nOK\r\n
Пример установки: AT+CMOD=1\r\n
AT+CMODE=РЕЖИМ\r\n OK\r\n
BIND AT+BIND?\r\n +BIND:АДРЕС\r\n
OK\r\n
Запрос / установка фиксированного адреса:
Если модуль находится в роли ведущего (ROLE=1) и установлен режим подключения к фиксированному адресу (CMODE=0), то он будет подключаться только к тому Bluetooth устройству, адрес которого указан данной командой.
Части адреса вводятся: при установке — через запятую, а при ответе — через двоеточие.
Пример ответа: +BIND:1234:56:789ABC\r\nOK\r\n
Пример установки: AT+BIND=0,0,0\r\n
AT+BIND=АДРЕС\r\n OK\r\n
POLAR AT+POLAR?\r\n +POLAR:ЛОГ,ЛОГ\r\n
OK\r\n
Запрос / установка активного логического уровня для включения светодиодов:
Полярность представлена цифрой 0 или 1 соответствующей активному логическому уровню.
Первый параметр указывает логический уровень для включения светодиода подключённого к выводу PIO8 (отображает режим работы), а второй для светодиода подключённого к выводу PIO9 (отображает статус соединения).
Пример ответа: +POLAR:1,1\r\nOK\r\n
Пример установки: AT+POLAR=1,1\r\n
AT+POLAR=ЛОГ,ЛОГ\r\n OK\r\n
PIO AT+PIO=НОМЕР,УРОВЕНЬ\r\n OK\r\n Установка логического уровня PIO:
Позволяет установить логический уровень на выводе PIO. Номер вывода представлен числом от 2 до 11, кроме 8 и 9. Уровень представлен цифрой 0 или 1.
Пример установки: AT+PIO=11,0\r\n
MPIO AT+MPIO?\r\n +MPIO:ЧИСЛО\r\n
OK\r\n
Запрос / установка логических уровней PIO:
Позволяет узнать или установить логические уровни сразу на всех выводах PIO.
Уровни представлены шестнадцатиричным числом, каждый бит которого соответствует уровню вывода PIO.
Пример ответа: +MPIO:1F0\r\nOK\r\n
Пример установки: AT+MPIO:CFC\r\n
AT+MPIO=ЧИСЛО\r\n OK\r\n
IPSCAN AT+IPSCAN?\r\n +IPSCAN:А,Б,В,Г\r\n
OK\r\n
Запрос / установка параметров IP сканирования:
А — интервал сканирования
Б — продолжительность сканирования
В — интервал страниц
Г — количество страниц
Пример ответа: +IPSCAN:1024,512,1024,512\r\nOK\r\n
Пример установки: AT+IPSCAN:1024,512,1024,512\r\n
AT+IPSCAN=А,Б,В,Г\r\n OK\r\n
SNIFF AT+SNIFF?\r\n +SNIFF:А,Б,В,Г\r\n
OK\r\n
Запрос / установка параметров энергосберегающего режима:
А — максимальное время
Б — минимальное время
В — период повторов
Г — таймаут
Пример ответа: +SNIFF:0,0,0,0\r\nOK\r\n
Пример установки: AT+SNIFF=0,0,0,0\r\n
AT+SNIFF=А,Б,В,Г\r\n OK\r\n
ENSNIFF AT+ENSNIFF=АДРЕС\r\n OK\r\n Переход в энергосберегающий режим:
Части адреса вводятся через запятую (NAP,UAP,LAP)
Пример команды: AT+ENSNIFF=1234,56,789ABC\r\n
EXSNIFF AT+EXSNIFF=АДРЕС\r\n OK\r\n Выход из энергосберегающего режима:
Части адреса вводятся через запятую (NAP,UAP,LAP)
Пример команды: AT+EXSNIFF=1234,56,789ABC\r\n
SENM AT+SENM?\r\n +SENM:СЕКРЕТ,ШИФР\r\n
OK\r\n
Запрос / установка параметров безопасности:
Режим секретности представлен цифрой:
0 — выключен
1 — незащищённое соединение
2 — защита на сервисном уровне
3 — защита на уровне соединения
4 — неизвестный режим
Режим шифрования представлен цифрой:
0 — без шифрования
1 — шифруется только трафик PTP
2 — шифруется весь трафик
Пример ответа: +SENM:0,0\r\nOK\r\n
Пример установки: AT+SENM:0,0\r\n
AT+SENM=СЕКРЕТ,ШИФР\r\n OK\r\n
PMSAD AT+PMSAD=АДРЕС\r\n OK\r\n Удаление устройства из списка пар:
Удаление Bluetooth устройства из списка приведёт к необходимости заново образовывать пару для подключения к нему.
Части адреса удаляемого устройства вводится через запятую (NAP,UAP,LAP)
Пример команды: AT+PMSAD=1234,56,789ABC\r\n
RMAAD AT+RMAAD\r\n OK\r\n Удаление всех устройств из списка пар:
Очистка данного списка приведёт к необходимости заново образовывать пары с Bluetooth устройствами для подключения к ним.
FSAD AT+FSAD=АДРЕС\r\n OK\r\n
или
FAIL\r\n
Поиск устройства в списке пар:
Если Bluetooth устройство с указанным адресом имеется в списке, то модуль вернёт OK\r\n иначе FAIL\r\n.
Части адреса вводятся через запятую (NAP,UAP,LAP)
Пример запроса: AT+FSAD=1234,56,789ABC\r\n
ADCN AT+ADCN?\r\n +ADCN:КОЛИЧЕСТВО\r\n
OK\r\n
Запрос количества устройств в списке пар:
При образовании пары ведущий-ведомый, данные о паре автоматически попадают в список пар и для последующих подключений (даже после отключения питания) не требуется повторно устанавливать пару.
Пример ответа: +ADCN:10\r\nOK\r\n
MRAD AT+MRAD?\r\n +MRAD:АДРЕС\r\n
OK\r\n
Запрос адреса устройства из списка пар:
Модуль вернёт адрес Bluetooth устройства из списка пар с которым выполнялось последнее успешное соединение.
Части адреса выводятся через двоеточие (NAP:UAP:LAP)
Пример ответа: +MRAD:1234:56:789ABC\r\nOK\r\n
STATE AT+STATE?\r\n +STATE:СТАТУС\r\n
OK\r\n
Запрос статуса модуля:
Модуль вернёт свое текущее состояние в виде строки:
INITIALIZED — инициализация
READY — готов
PAIRABLE — образование пары
PAIRED — пара образована
INQUIRING — запрос
CONNECTING — подключение
CONNECTED — подключён
DISCONNECTED — отсоединён
NUKNOW — неизвестное состояние
Пример ответа: +STATE:CONNECTED\r\nOK\r\n
INIT AT+INIT\r\n OK\r\n
или
FAIL\r\n
Инициализация профиля SPP:
Профиль SPP эмулирует последовательный порт.
INQ AT+INQ\r\n +INQ:АДРЕС,ТИП,СИГНАЛ\r\n
+INQ:АДРЕС,ТИП,СИГНАЛ\r\n

+INQ:АДРЕС,ТИП,СИГНАЛ\r\n
Поиск (опрос) Bluetooth устройств:
Команда доступна модулю в роли ведущего.
Модуль ищет Bluetooth устройства в радиусе действия и выводит каждый найденный модуль на новой строке. Режим поиска (опроса) устанавливается командой AT+INQM, код опроса устанавливается командой AT+IAC, тип искомых устройств указывается командой AT+CLASS. Поиск завершается по достижении предельного количества найденных Bluetooth устройств, или по достижении таймаута, или командой AT+INQC.
Пример ответа: +INQ:1234:56:789ABС,240404,7FFF
INQC AT+INQC\r\n OK\r\n Завершить поиск (опрос) Bluetooth устройств:
Досрочно завершает поиск Bluetooth устройств инициированный командой AT+INQ
PAIR AT+PAIR=АДРЕС,ТАЙМАУТ\r\n OK\r\n
или
FAIL\r\n
Создать пару с Bluetooth устройством:
Создание пары или сопряжение Bluetooth устройств инициируется ведущим устройством.
Таймаут указывается десятичным числом в секундах.
Если пара создана, то информация о ней автоматически запишется в список пар, модуль ответит OK\r\n после чего можно подключить Bluetooth устройство командой AT+LINK. Если пара не создана (например не подошёл PIN-код или истек таймаут), то модуль ответит FAIL\r\n.
Пример команды: AT+PAIR=1234,56,789ABC,10\r\n
LINK AT+LINK=АДРЕС\r\n OK\r\n
или
FAIL\r\n
Подключиться к Bluetooth устройству:
После выполнения данной команды можно общаться с подключённым Bluetooth устройством.
Команда доступна модулю в роли ведущего.
Пример команды: AT+LINK=1234,56,789ABC\r\n
DISC AT+DISC\r\n +DISC:РЕЗУЛЬТАТ\r\n
OK\r\n
Отключиться от Bluetooth устройства:
Команда указывает модулю отключиться от Bluetooth устройства с которым установлено соединение. После отключения от Bluetooth устройства информация о нём сохраняется в списке пар. Если потребуется вновь подключиться к этому устройству, то создание пары будет необязательно (если Bluetooth устройство намеренно не удалить из списка пар).
После выполнения команды модуль ответит результатом её выполнения:
SUCCESS — успех
LINK_LOSS — соединение потеряно
NO_SLC — отсутствует SLC
TIMEOUT — истекло время ожидания
ERROR — ошибка
Пример ответа: +DISC:SUCCESS\r\nOK\r\n

* Ведомый в цикле — это ведомая роль модуля в которой он отправляет обратно всё что получает от ведущего.
** На некоторые команды модуль реагирует только при нажатой кнопке модуля или наличии высокого уровня на выводе K.

Описание ошибок выдаваемых модулем:

Если отправить команду, которую модуль не знает, не может выполнить, или у команды неправильные аргументы, то модуль вернёт строку «ERROR:(НОМЕР)», где по указанному шестнадцатиричному номеру можно определить, на что «ругается» модуль.

№ ошибки Описание ошибки
0 Неправильная AT команда (нет такой команды)
1 Результат по умолчанию
2 Ошибка сохранения пароля
3 Слишком длинное имя устройства (более 32 байт)
4 Имя устройства не указано
5 Часть адреса NAP слишком длинная (более 4 разрядов в шестнадцатиричной системе)
6 Часть адреса UAP слишком длинная (более 2 разрядов в шестнадцатиричной системе)
7 Часть адреса LAP слишком длинная (более 6 разрядов в шестнадцатиричной системе)
8 Не указана маска порта PIO
9 Не указан номер вывода PIO
A Не указан тип (класс) устройства
B Слишком длинный тип (класс) устройства
C Не указан общий код доступа IAC (Inquire Access Code)
D Слишком длинный общий код доступа IAC (Inquire Access Code)
E Недопустимый общий код доступа IAC (Inquire Access Code)
F Не указан пароль (или пароль пуст)
10 Слишком длинный пароль (более 16 байт)
11 Недопустимая роль модуля
12 Недопустимая скорость передачи данных
13 Недопустимый размер стоп-бита
14 Недопустимая настройка бита четности
15 Устройство отсутствует в списке пар (списке сопряжённых Bluetooth устройств)
16 Профиль последовательного порта (SPP, Serial Port Profile) не инициализирован
17 Повторная инициализация профиля SPP (SPP, Serial Port Profile)
18 Недопустимый режим опроса Bluetooth устройств
19 Слишком большое время опроса
1A Не указан адрес Bluetooth устройства
1B Недопустимый режим безопасности (секретности)
1C Недопустимый режим шифрования

Примечание:

Если нажать на кнопку или подать высокий уровень на вход K непосредственно в момент включения модуля (подачи питания), то модуль перейдёт в режим AT-команд. В этом режиме модуль не соединится с другими модулями, но у этого режима фиксированная скорость = 38400 бит/сек. Если при настройке, в обычном режиме работы модуля, Вы не смогли определить скорость модуля, то можно войти в данный режим и установить новую скорость. Вновь установленная скорость вступит в силу только в обычном режиме, для этого потребуется перезагрузить модуль не удерживая кнопку и не подавая высокий уровень на вход K в момент включения. Помните, что в обычном режиме, не раньше чем через пол секунды после подачи питания (или перезагрузки) нужно кратковременно нажать на кнопку или подать кратковременный высокий уровень на вход K модуля, иначе он не будет воспринимать AT-команды.

Если Вы хотите иметь возможность «нажимать» на кнопку программно, но у Вашего модуля нет вывода K, воспользуйтесь командой AT+PIO=11,УРОВЕНЬ\r\n, где уровень представляется цифрой 1 или 0 соответствующий устанавливаемому логическому уровню. (AT+PIO=11,0\r\n — кнопка отпущена, AT+PIO=11,1\r\n — кнопка нажата).

У некоторых модулей есть вывод En который управляет питанием и подтянут к Vcc. Если на вывод En подать низкий логический уровень, то отключится питание чипов. Данный вывод можно использовать для программного входа в режим AT-команд. Если сразу после снятия низкого уровня с вывода En подать команду AT+PIO=11,1\r\n это будет эквивалентно включению модуля с нажатой кнопкой.

Создание ведомого ожидающего подключения ведущего:

  • AT+DISC\r\n — Разорвать соединение (на случай если модуль соединён).
  • AT+ORGL\r\n — Сбросить пользовательские настройки в значения по умолчанию.
  • AT+RMAAD\r\n — Очистить список пар (авторизованных устройств) чтоб к модулю не подключился тот кого отсоединили.
  • AT+NAME=iArduino\r\n — Установить имя модуля (не более 32 символов).
  • AT+PSWD=1234\r\n — Установить PIN-код для подключения к модулю (не более 16 символов).
  • AT+ROLE=0\r\n — Установить модулю роль ведомого (если она не установилась при сбросе пользовательских настроек).
  • AT+RESET\r\n — Перезагрузить модуль.

Не раньше чем через пол секунды после перезагрузки (командой AT+RESET\r\n) нужно кратковременно нажать на кнопку или подать кратковременный высокий уровень на вход K модуля, иначе он не будет воспринимать новые AT-команды.

Если модуль с ведущей ролью подключается к ведомым модулям по их адресу, а не через их имя, то адрес данного (ведомого) модуля можно узнать выполнив команду AT+ADDR?\r\n.

Создание ведущего с подключением к ведомому:

  • AT+DISC\r\n — Разорвать соединение (на случай если модуль соединён).
  • AT+ORGL\r\n — Сбросить пользовательские настройки в значения по умолчанию.
  • AT+RMAAD\r\n — Очистить список пар (авторизованных устройств) чтоб модуль не пытался подключился к тому от кого отсоединили.
  • AT+BIND=АДРЕС\r\n — Установить фиксированный адрес для подключения (указываем адрес ведомого Bluetooth устройства)
  • AT+CMODE=0\r\n — Указываем модулю подключаться только к фиксированному адресу
  • AT+ROLE=1\r\n — Установить модулю роль ведущего устройства
  • AT+PSWD=1234\r\n — Запомнить PIN-код ведомого Bluetooth устройства
  • AT+PAIR=АДРЕС,10\r\n — Образовать пару с ведомым Bluetooth устройством, указав его адрес и таймаут 10 сек
  • AT+RESET\r\n — Перезагрузить модуль.
  • AT\r\n — Выполнить команду Тест (для проверки наличия связи с модулем)
  • AT+LINK=АДРЕС\r\n — Подключиться к ведомому Bluetooth устройству, указав его адрес
  • AT+STATE?\r\n — Получить текущее состояние модуля (на практике эта команда может ускорить процесс подключения)

Не раньше чем через пол секунды после перезагрузки (командой AT+RESET\r\n) нужно кратковременно нажать на кнопку или подать кратковременный высокий уровень на вход K модуля, иначе он не будет воспринимать новые AT-команды.

Ссылки:

  • Bluetooth модуль HC-05.
  • Wiki — используем Arduino как USB — UART преобразователь.
  • Программа терминал — Termite с поддержкой Русского языка.

gsm sim800 at команды и подключение к Ардуино.

Подключение модуля gsm SIM800 к Ардуино. Управление с помощью AT команд gsm модулем SIM800L. Рассмотрим схему подключения к Ардуино и вопросы питания модуля.
Приветствую всех смотрящих мой канал. Наконец-то дошли руки до GSM модуля SIM800L. Я давно хотел сделать серию уроков про этот модуль. В этом видео я расскажу как подключить модуль, как с ним работать при помощи AT команд. 
Этот модуль может не только отсылать смс и звонить, но также может управлять Ардуиной, а также быть прослушкой и служить переговорным устройством. А ещё будильником и много, много ещё чем. Короче смотрите это и следующее видео, там мы всё изучим.
Главная проблема этого модуля это не стандартное питание и большое потребление тока при пиковых нагрузках. Поэтому мы и начнём именно с подключения.

Питание модуля SIM800.
Модуль очень требователен к питанию, поэтому питать его от Ардуино не желательно. Лучше использовать отдельный блок питания.
Напряжение при котором модуль будет работать от 3,4 до 4,4 вольта. Я обычно выставляю около 4 вольт. В спящем режиме модуль потребляет чуть больше 1 ma. Ещё по питанию надо обязательно установить электролитический конденсатор. Он будет сглаживать скачки напряжения. Это улучшит работу модуля.   
Теперь поговорим о подключении Ардуино и модуля SIM800. Подключение очень простое в основном можно использовать только два контакта это RX и TX. Подключаться они должны крест на крест. То есть если на Ардуино вы выбрали RX то на модуле надо подключить TX, и на оборот.
Так как Ардуино работает по пятивольтовой схеме, то напрямую подключать нельзя. Многие конечно подключают, но я вам не советую. 
Правильное подключение — это  TX Ардуино подключить к RX модуля через делитель напряжения или через специальные модули сопряжения. Я использую делитель напряжения с коэффициентом 2. 
Это когда берутся два одинаковых резисторы, а на выходе получаем половину напряжения. И из 5 вольт с Ардуино, получаем 2,5 вольта. Чего вполне достаточно для работы МОДУЛЯ.

Установка библиотеки.
Для работы нам понадобится библиотека для работы модуля SIM800L. Поэтому идём Менеджер библиотек и скачиваем нужную библиотеку. Там есть несколько библиотек, но мне больше всего нравится вот эта. Выбираем последнюю версию. Нас сегодняшний момент это версия 1 14 и устанавливаем её. 
Первое подключение и запуск тестового скетча.
Перед тем как мы пойдём дальше нам надо убедиться, что мы всё правильно собрали и у нас всё работает. Для этого запускаем скетч под названием Тест. Все скетчи будут как всегда на моём сайте, ссылка на архив будет в описании. Схему подключения я покажу дальше в видео. Контакты RX и TX я подключил к пинам 10 и 11 Ардуино. Сброс я подключать не стал, так как сейчас он без надобности. Внешнюю антенну я подключать не стал, так как у меня и так отлично ловит. Работу модуля можно контролировать по миганию светодиода. Сначала идут быстрые мигания, затем пауза, потом снова быстрые мигания.
Теперь посмотрим, что нам покажет Ардуино. 
Здесь я вывел только самое необходимое чтобы проверить что всё работает. Это название модуля, версию прошивки, номер СИМ карты, уровень сигнала и самое главное- регистрация в сети.
Если у вас примерно тоже самое и нет ошибок, то поздравляю. У вас всё работает и можно переходить дальше.

AT команды
Здесь я расскажу о самых основных на мой взгляд командах. Если вам покажется этого мало, то вы можете скачать даташит на 300 страниц. Поверьте там найдётся всё. В этом видео я покажу только команды для настройки и работы модуля. С командами для звонков и отправки СМС я познакомлю вас в следующем уроке, а то и так это видео сильно затянулось. А в третьей части я научу вас отправлять смс и звонить когда наступит какое-то событие, например  повышение температуры, или утечка газа, прорвало трубу или обнаружено движение, и многое, многое другое. Так что если вы ещё не подписались, то это можно сделать прямо сейчас. Так же вы можете написать в комментариях какие примеры вы бы хотели видеть в этом видео. Я постараюсь их записать. И так приступаем.
Если после запуска скетча AT вы получили ОК значит всё в порядке и идём дальше.

Командой AT+CPIN? Проверяем модуль. Если получили в ответ ready, значит карта модуль готов к работе.

AT+CREG?    Регистрация в сети. Для работы необходимо чтобы СИМ карта зарегистрировалась в сети. Это можно увидеть по срабатыванию светодиода на модуле. Он станет мигать редко, примерно раз в 2-3 секунды. Вот возможные параметры вывода.              
Первый параметр:
   0 – нет кода регистрации сети
   1 – есть код регистрации сети
   2 – есть код регистрации сети + доп параметры
Второй параметр:
   0 – не зарегистрирован, поиска сети нет
   1 – зарегистрирован, домашняя сеть
   2 – не зарегистрирован, идёт поиск новой сети
   3 – регистрация отклонена
   4 – неизвестно
   5 – роуминг

AT+IPR? Информация о скорости порта. По умолчанию он равен 0. Это значит что скорость будет устанавливаться автоматически. Скорость можно установить самостоятельно вот этой командой AT+IPR=9600, но я не советую это делать.

Узнаем своего оператора оператором AT+COPS? Моя СИМ карта от Билайна, что мы и видим на экране. 

Смотрим питание AT+CBC. Этой командой мы можем узнать идёт ли зарядка аккумулятора, процент заряда и напряжение питания в милливольтах. Чтобы узнать напряжение в вольтах, надо разделить на 1000. У меня напряжение идущее на модуль около четырёх вольт.
 Первый параметр:
    0 – не заряжается
    1 – заряжается
    2 – зарядка окончена
Второй параметр:
   1-100 % — уровень заряда батареи
Третий параметр:
    Напряжение питание модуля (VBAT), мВ

Проверим качество сигнала AT+CSQ (31,0) Если ваш сигнал выше 20, то это очень хорошо и вам не нужно подключать дополнительно антенну. Например, у меня сигнал 31. Это отличный результат. В таблице можно посмотреть сведения о качестве.         
     от 20 и выше сигнал отличный
     от 15 до 19 сигнал хороший
     от 10 до 14 среднее качество
     меньше 10 плохое качество сигнала

Теперь узнаем производителя чипа. AT+GMI   

А так мы можем вывести название модуля. AT+GMM  

Ревизия AT+GMR                
Теперь получим информацию о дате и времени. AT+CCLK? У вас она наверняка не будет соответствовать текущему времени, поэтому вам надо будет установить настоящее время и дату, чем мы сейчас и займёмся
AT+CCLK=»21/09/27,19:12:00+03″ Для установки надо записать текущие значения вот в таком формате. Год, месяц, день. Часы, минуты и секунды. И последний параметр-часовой пояс. Нажимаем отправить и видим, что всё окей. Теперь надо проверить какие значения теперь выводит модуль. Дождёмся когда время перескочит на следующий час и посмотрим. Так как я не настраивал секунды, поэтому время отстаёт на несколько секунд. Загружаем ещё раз и видим, что время установлено и работает правильно.
  год/месяц/дата,часы:минуты:секунды+часовой пояс

AT+GSN    Теперь получим IMEI номер. Вот что про этот номер написано в ВИКИ.  
AT+CPAS  Проверка состояние модуля. Здесь может быть 4 значения.
      0 – готовность к работе, 
      3 – входящий звонок, 
      4 – голосовое соединение, 
      2 – неизвестно.

AT+GSMBUSY=0 Запрет входящих звонков. Вы можете разрешить или запретить принимать входящие звонки.
    0 – разрешены
    1 – запрещены

AT+CLIP=1 включение/выключение функции Автоматического определения номера, АОН. 
       1 – включен, 
       0 – выключен.

ATS0=0 Автоответчик. Здесь можно задать ручной или автоматический способ срабатывания автоответчика. Можно задать после какого количества звонков будет включаться автоответчик.
       0 – ручной
       1-более – автоматический, после заданного количества звонков

AT+CPIN=XXXX – ввод пин-кода сим-карты. Если у вас установлен пи код, то для работы вам надо сначала ввести его используя эту команду. Если пин не был установлен, то при вводе у вас будет появляться информация об ошибке.

AT+CPOWD=1 Выключение модуля SIM800L
    0 – срочное
    1 – нормальное

AT+CFUN=1,1 Перезагрузка модуля. Есть два варианта перезагрузки модуля. Обычная, то есть модуль перезагрузится полностью и частичная. Перезагрузятся только цепи приёма и передачи сигнала.
Первый параметр:
0 – минимальный функционал
    1 – нормальный режим (по умолчанию)
    2 – выключения цепей приёма и передачи сигнала
Второй параметр:
    0 – выполнить без перезагрузки
    1 – перезагрузить (доступно только в нормальном режиме, т.е. параметры = 1,1)

AT&F – сброс до заводских настроек.
Перед следующей командой мы посмотрим как работает установленное ранее время. А теперь сбросим все изменения до заводских настроек. Снова наберём команду для вывода времени и видим, что снова показывается не правильное время.
На этом первая часть про работу AT команд заканчивается. Но не переживайте, скоро будет вторая и третья части.

 

встроенных примеров | Документация по Arduino

Основы

Аналоговое чтение серийного номера

Чтение потенциометра, вывод его состояния в последовательный монитор Arduino.

Необходим минимум кода

Минимум кода, необходимый для запуска скетча Arduino.

Включение и выключение светодиода каждую секунду.

Цифровое чтение серийного номера

Чтение переключателя, вывод состояния в последовательный монитор Arduino.

Затухание светодиода

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

Чтение аналогового напряжения

Считывает аналоговый вход и выводит напряжение на последовательный монитор.

Цифровой

Мигание без задержки

Мигает светодиодом без использования функции delay().

Как подключить и запрограммировать кнопку

Узнайте, как подключить и запрограммировать кнопку для управления светодиодом.

Отказ от кнопки

Чтение кнопки, фильтрация шума.

InputPullupSerial

Демонстрирует использование INPUT_PULLUP с pinMode()

Обнаружение изменения состояния (обнаружение фронта) для кнопок

Подсчет количества нажатий кнопок.

Простая клавиатура с использованием функции tone()

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

Воспроизведение мелодии с помощью функции tone()

Воспроизведение мелодии с помощью пьезодинамика.

Тон на нескольких динамиках

Воспроизведение сигналов на нескольких динамиках последовательно с помощью команды tone().

Повторитель высоты тона с помощью функции tone()

Воспроизведение высоты тона на пьезодинамике в зависимости от аналогового входа.

Аналоговый

Аналоговый вход, выход Последовательный

Чтение вывода аналогового входа, сопоставление результата, а затем использование этих данных для уменьшения или увеличения яркости светодиода.

Аналоговый вход

Используйте потенциометр для управления миганием светодиода.

Аналоговая запись с 12 светодиодами на плате Arduino Mega

Включение и выключение 12 светодиодов один за другим с помощью платы Arduino Mega.

Калибровка входа датчика

Определите максимальное и минимальное значения для ожидаемых значений аналогового датчика.

Затухание

Используйте аналоговый выход (вывод ШИМ) для затухания светодиода.

Сглаживание показаний аналогового входа

Сглаживание нескольких показаний аналогового входа.

Связь

Таблица ASCII

Демонстрирует расширенные функции последовательного вывода Arduino.

Создать диммер светодиода

Переместите мышь, чтобы изменить яркость светодиода.

Создание графика с обработкой

Отправить данные на компьютер и отобразить их в Обработке.

Проигрыватель MIDI-нот

Последовательная отправка сообщений MIDI-нот.

Используйте несколько последовательных портов на Arduino Mega

Используйте два последовательных порта, доступных на Arduino Mega.

Физический пиксель

Включение и выключение светодиода путем отправки данных на Arduino из Processing или Max/MSP.

Чтение строки ASCII

Разобрать строку целых чисел, разделенных запятыми, чтобы погасить светодиод.

Последовательный вызов и ответ (квитирование)

Отправка нескольких переменных с использованием метода вызова и ответа (квитирование).

Последовательный вызов и ответ (квитирование) с выходом в кодировке ASCII

Отправка нескольких переменных с использованием метода вызова и ответа (квитирование) и кодирование значений в ASCII перед отправкой.

SerialEvent

Демонстрирует использование функции serialEvent().

SerialPassthrough

Демонстрирует, как виртуально соединить Serial и Serial1.

Виртуальный микшер цветов

В этом примере показано, как отправить несколько значений с платы Arduino на компьютер.

Структуры управления

Как использовать массивы

Вариант примера цикла For, демонстрирующий использование массива.

Итерация цикла For (он же The Knight Rider)

Управление несколькими светодиодами с помощью цикла for и.

Переключатель (корпус) Заявление, используется с входом датчика

Как выбрать между дискретным числом значений.

Оператор Switch (case), используемый с последовательным вводом

Второй пример switch case, показывающий, как выполнять различные действия на основе символов, полученных через последовательный порт.

Цикл while

Как использовать цикл while для калибровки датчика во время считывания кнопки.

Оператор if (условный оператор)

Используйте оператор if для изменения выходных условий на основе изменения входных условий.

Датчики

Акселерометр ADXL3xx

Чтение акселерометра ADXL3xx.

Обнаружение детонации

В этом учебном пособии показано, как использовать пьезоэлемент для обнаружения вибрации.

Акселерометр Memsic 2125

Узнайте, как считывать данные с двухосевого акселерометра Memsic 2125.

Ультразвуковой дальномер Ping

Обнаружение объектов с помощью ультразвукового дальномера.

Дисплей

Светодиодная гистограмма

Узнайте, как сделать светодиодную гистограмму — ряд светодиодов в линию.

Управление матрицей светодиодов 8×8.

Строка-столбец Сканирование для управления светодиодной матрицей 8×8.

Строки

Анализ символов

Используйте операторы для распознавания типа символов, с которыми мы имеем дело.

Оператор сложения строк

Сложение строк различными способами.

Операторы добавления строк

Используйте оператор += и метод concat() для добавления элементов к строкам.

Функции изменения регистра строки

Изменить регистр строки.

Функции символов строки

Получить/установить значение определенного символа в строке.

Операторы сравнения строк

Узнайте, как сравнивать строки по алфавиту. Они полезны, помимо прочего, для сортировки и алфавитного алфавита.

Конструкторы строковых объектов

Инициализировать строковые объекты.

Метод String indexOf() и lastIndexOf()

Поиск первого/последнего экземпляра символа в строке.

Как использовать String length()

В этом примере показано, как использовать эту команду для ответа на ввод из последовательного монитора.

Команды String length() и trim()

Получить и обрезать длину строки.

Функция замены строки

Функция replace() позволяет заменить все экземпляры данного символа в строке другим символом.

Строка начинается с и заканчивается с Функции

Проверка того, какими символами/подстроками начинается или заканчивается заданная строка.

Подстрока строки Функция

Поиск «фраз» в заданной строке.

Функция String to Int

Позволяет преобразовать строку в целое число.

USB

Кнопочное управление мышью

Управление движением курсора с помощью 5 кнопок.

Управление мышью с помощью джойстика

Управляет перемещением курсора компьютера с помощью джойстика при нажатии кнопки.

Управление клавиатурой и мышью

Демонстрирует работу с мышью и клавиатурой в одной программе.

Выход из системы с клавиатуры

Выход текущего пользователя из системы с помощью клавиш.

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

Отправляет текстовую строку при нажатии кнопки.

Перепрограммирование клавиатуры

Открывает новое окно в Arduino IDE и перепрограммирует Leonardo с помощью простой программы мигания.

Keyboard Serial

Считывает байт из последовательного порта и отправляет обратно нажатие клавиши.

Arduino ISP

Arduino как ISP и загрузчики Arduino

Arduino ISP превращает ваш Arduino во встроенный программатор для перепрограммирования чипов AtMega.

От Arduino к микроконтроллеру на макетной плате

Миграция платы Arduino на автономный микроконтроллер на макетной плате.

5 советов по улучшению ваших навыков программирования на Arduino — Arduino Maker Man

Пожалуйста, положите немного денег в банке с чаевыми, нажав на кнопку пожертвовать, чтобы поддержать меня, чтобы я мог продолжать создавать конкуренцию, как это. P.S. пожалуйста, пожертвуйте более $ 1 как PayPal берет минимум 0,30 доллара США за транзакцию

На протяжении своей более чем 30-летней карьеры я время от времени программировал на разных языках по разным причинам. Я быстро понял, что все языки программирования имеют одну общую черту. Вы можете написать полнофункциональную программу, которую через 24 часа после завершения никто не сможет понять, как она работает; даже сам программист совершенно не понимает, как это вообще могло работать.

Первый шаг в изучении нового языка программирования — научиться писать разборчивый код (по моему мнению). Это сложно сделать, когда вы начинаете учиться, но если вы будете следовать 5 советам, вы увидите разницу в том, как быстро вы улучшите свои навыки, и сможете повторно использовать свой код даже спустя месяцы после того, как вы закончите проект.

Указатель

  1. Используйте описательные имена переменных
  2. Сделайте соответствующий отступ в коде
  3. Используйте Commends, пожалуйста
  4. Используйте functions() для организации и повторного использования вашего кода
  5. Документ, документ, документ
  6. 3 Используйте описательные имена переменных

    Я так часто это вижу; int x=100; или String y=”hello molly”;. Это совершенно законно и правильно, но имена этих переменных ничего не говорят о том, что они делают. Даже если x и y в этом примере имеют какое-то отношение к отображению данных на оси x/y, имена слишком неоднозначны.

    Всегда давайте своим переменным осмысленные имена, например интервал x_Axis=100;. Если вы объявляете переменную для цифрового вывода, который будет использоваться с кнопкой, которая включает светодиод, используйте button_led_on_off_Pin. Это имя имеет значение. Он говорит вам, что это как-то связано с кнопкой, которая включает и выключает светодиод.

    На мой взгляд, единственным местом, где можно использовать односимвольные переменные, являются такие вещи, как переменная инициализации цикла for() или что-то подобное.

    2. Установите соответствующий отступ в коде

    Установите соответствующий отступ в коде! Если у вас есть вложенные операторы if, которые не имеют правильного отступа, становится очень трудно читать ваш код. Будет еще сложнее отладить, если у вас есть логическая ошибка (синтаксис вашего кода правильный, но код не делает то, что вы ожидали), возьмите этот пример кода:

    недействительный цикл () {
    если(ежик==кошка){
    если (кошка == как ёжик) {
     //ежик и кот дружат
    }иначе, если(ёжик!=кошка){
     //ежик и кот дружат
    }иначе если(кот != ёжик){
     //ежик и кот не друзья
    }
    }еще{
     //ежик и кот не в одной комнате
    }
    }
     

    Теперь посмотрите следующий пример кода с использованием отступа:

    недействительный цикл () {
     если(ежик==кошка){
     если (кошка == как ёжик) {
     //ежик и кот дружат
     }иначе, если(ёжик!=кошка){
     //ежик и кот дружат
     }иначе если(кот != ёжик){
     //ежик и кот не друзья
     }
     }еще{
     //ежик и кот не в одной комнате
     }
    }
     

    Обратите внимание, насколько легче стало читать ваш код. Ваш глаз может видеть, как эти операторы if() вложены друг в друга, и это значительно упрощает поиск вашей логической ошибки. Иногда я забываю добавить закрывающую скобку. Вы заполняете свой код и получаете «ожидается ‘}’ перед ‘else’» сообщение об ошибке при компиляции. В примере кода с отступом потребуется всего несколько секунд, чтобы выяснить, какая скобка была пропущена, удачи, чтобы найти ошибку в коде без отступа.

    3. Используйте Commends, пожалуйста

    Commends являются частью процесса документирования (но не считаются документацией) Все языки программирования позволяют оставлять комментарии. На мой взгляд, краткое объяснение того, для чего используется переменная (в момент объявления), имеет большой смысл и дает человеку, пытающемуся понять ваш код (может быть, вам самому через три месяца после того, как вы закончили), внутри что эта переменная используется для.

    инт кошка=0; //Если кошка находится в комнате, значение равно 1, в противном случае значение равно 0

    . Если у вас сложный вложенный оператор if() или цикл for(), вы можете сделать что-то вроде этого.

    недействительный цикл () {
     int cat=0;//Если кошка в комнате, значение равно 1, иначе значение равно 0
     int hedgehog=0;//Если ёжик в комнате, значение равно 1, иначе значение равно 0
     int likehedgehog=0;//Если кошке нравится значение ежа равно 1, иначе значение равно 0
     int likecat;//Если ёжику нравится кот, значение равно 1, иначе значение равно 0
     
     /**
     * Этот вложенный блок if() проверяет, находятся ли ежик и кот в одной комнате.
     * Если они находятся в одной комнате, мы проверяем, нравятся ли они друг другу
     * Если кошке нравится ежик, то все в порядке, если кошке не нравится ежик
     * они должны быть разделены
     */
     если(ежик==кошка){
     если (кошка == как ёжик) {
     //ежик и кот дружат
     }иначе, если(ёжик!=likecat){
     //ежик и кот дружат
     }иначе, если(кошка!=как ёжик){
     //ежик и кот не друзья
     }
     }еще{
     //ежик и кот не в одной комнате
     }
    }
     

    Обратите внимание, что расширенное описание помогает человеку, читающему ваш код, понять функцию этого блока кода. Я также размещаю расширенное описание в верхней части своих эскизов, объясняя, какова функция этого кода, мое имя, а иногда и мою контактную информацию, дату, когда я закончил, и версию этого текущего кода.

    /**
     * Автор: Аб Курк [email protected]
     * Дата: 04 декабря 2017 г.
     * Версия 1.0.0
     * Описание
     * По этому эскизу я буду отслеживать местонахождение моего кота и ежика.
     * Цель состоит в том, чтобы убедиться, что сегодня мой кот любит моего ежика.
     *
     */
     

    Если я позже вернусь и внесу изменения, я обновлю версию и дам описание того, что я изменил, когда и кто изменил внизу блока описания.

    4. Используйте functions() для организации и повторного использования кода

    Функции можно считать промежуточным уровнем , но даже новичку имеет смысл попробовать это сделать. Если у вас есть большие блоки кода, которые служат определенной цели, имеет смысл поместить их в отдельную функцию. Это делает ваш код более читабельным, а также может уменьшить объем кода, который вы пишете, потому что проще повторно использовать один и тот же код в другой части вашей программы.

    В качестве примера здесь приведен фрагмент кода из предыдущего урока, посвященного чтению данных из памяти. Сначала без использования функции;

    недействительный цикл () {
     // поместите сюда ваш основной код для многократного запуска:
     Строка SSID="";
     Строковый пароль="";
     /**
     * Чтение ssid из памяти с помощью библиотеки eeprom
     * ssid начинается с позиции памяти 0 и имеет длину 30 символов.
     */
     
     для (int n = 0; n < 30; ++n)
     {
     if(char(  EEPROM  .read(n))!=';'){//ищет символ конца данных ';'
     если (является пробелом (символ (  EEPROM  .read(n)))){//Удалите пробелы, например. пространство
     //ничего не делать
     }else ssid += String(char( EEPROM  .read(n)));
     
     }иначе n=31;
     }
     /**
     * Чтение пароля из памяти с помощью библиотеки eeprom
     * ssid начинается со 100 позиции памяти и имеет длину 30 символов.
     */
     
     для (целое n = 100; n <130; ++n)
     {
     if(char(  EEPROM  .read(n))!=';'){//ищет символ конца данных ';'
     if(isWhitespace(char(  EEPROM  . read(n)))){//Удалите пробелы, например, пространство
     //ничего не делать
     }else ssid += String(char( EEPROM  .read(n)));
     
     }иначе n=131;
     }
    }
     

    Вы видите, что два блока кода делают одно и то же. Вот пример того же кода, но с использованием функции;

    недействительный цикл () {
     // поместите сюда ваш основной код для многократного запуска:
     Строка SSID="";
     Строковый пароль="";
    /**
     * Чтение строки из памяти с помощью библиотеки eeprom
     * read_string(длина данных int,позиция в памяти int) это функция
     * Вы вызываете чтение данных из памяти. Вы даете ему стартовую позицию
     * в памяти и длину и возвращает строку, содержащую данные
     */
     ssid=read_string(0,30);//читаем ssid из памяти
     password=read_string(100,30);//чтение пароля из памяти
    /**
     * Считывает строку из памяти, l — длина данных, которые нужно прочитать из памяти,
     * p — позиция в памяти, с которой начать чтение
     */
    Строка read_string(int l, int p){
     темп строки;
     для (int n = p; n < l+p; ++n)
     {
     если(знак(  EEPROM  . read(n))!=';'){
     if(isWhitespace(char( EEPROM  .read(n)))){
     //ничего не делать
     }else temp += String(char( EEPROM  .read(n)));
     
     }иначе n=l+p;
     
     }
     температура возврата;
    }
     

    Как видите, я повторно использовал код, создав функцию. Это облегчает чтение и использует меньше памяти на плате контроллера. Если вы научитесь использовать функции, вы сэкономите время и создадите более удобный код, который вы сможете повторно использовать в своем следующем проекте 9.0005

    5. Документ, документ, документ

    Документация вашего проекта, вероятно, самая сложная и самая скучная часть вашего проекта. Мне всегда казалось, что это надоедливая задача, которая на самом деле не нужна. Для клиентов и работодателей это часто рассматривается как пустая трата времени и денег. Реальность такова, что это всегда сэкономит время и деньги на бэкенде проекта.

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

    Программное обеспечение:

    • Библиотеки, которые я использовал, версии и откуда я их взял, если скачал.
    • Все созданные мной функции и описание их функций и в какой строке их можно найти.
    • Любые методы и их потомки
    • Полное объяснение того, что делает скетч и как его использовать.

    Раздел аппаратного обеспечения:

    • Я вставил схему того, как подключить его к моей макетной плате. Я часто использую для этого программу fritzing. Он прост в использовании и бесплатен.
    •  Каждая коммутационная плата и датчики, которые используются в проекте, к каким контактам я их подключаю. Я также отмечаю, какие программные библиотеки необходимы для этого оборудования.
    • Если это экзотический датчик или коммутационная плата, я также отмечаю, где я его купил. Это также означает, что если через 6 месяцев вы сделаете проект одного и того же типа, вы сможете оглянуться на свои ранее завершенные проекты и повторно использовать свой код и идеи, и вам не придется постоянно изобретать велосипед.

      По своему опыту знаю, что это выглядит намного проще и тратится меньше времени, чтобы не делать всего этого и просто писать код без форматирования и документации, но вы ошибаетесь.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *