Программа для прошивки sim800l
Последние изменения в прошивке:
добавлен аглоритм активациии и деактивации автопрогрева
добавлен аглоритм активациии и деактивации отправки данных на сервер
добавлена функция перезагрузки модема если оператор блокирует трафик (бывает при отрицательном балансе), при новой регистрации в сети передача данных возобновляется
номер телефона хозяина для входящих вызовов call_phone= "+375290000000";
номер телефона куда отправляем СМС отчет SMS_phone= "+375290000000";
адрес устройства на сервере MAC = "80-01-AA-00-00-00"; - нули заменить на свои придуманные цифры
имя устройства на сервере народмон SENS = "VasjaPupkin"; - аналогично
точка доступа для выхода в интернет APN = "internet.mts.by"; вашего сотового оператора
имя USER = "mts"; и пароль PASS = "mts"; для выхода в интернет вашего сотового оператора
n_send = true; если вы хотите, или n_send = false; если не хотите отправлять данные на сервер
sms_report = true; - разрешить отправку SMS отчета, или sms_report = false; если жалко денег на SMS
Vstart = 13.50 - порог детектирования по которому будем считать что авто зарежает АКБ
m = 69.91; - делитель, для точной калебровки напряжения АКБ
Для подключения к авто c класическим замком на 4 провода, если у вас япошка с замком на 6 проводов, то там все веселее.
выход на реле иммобилайзера и первого положения замка зажигания FIRST_P_Pin 8 , на плате OUT1
выход на реле зажигания ON_Pin 9 , на плате OUT2
выход на реле стартера STARTER_Pin 12 , на плате OUT3
выход на включение обогрева сидений или вебасто WEBASTO_pin 11 , на плате OUT4 (опция)
выход на реле управления подогревом сидений, на плате OUT5 (опция)
выход на сигнальный светодиод ACTIV_Pin 13 на плате OUT6 (опция)
вход Feedback_Pin A1 - для проверки на момент включенного зажигания с ключа, на плате FB
вход STOP_Pin A2 - на концевик педали тормоза (АКПП) или на датчик нейтрали в МКПП, на плате IN2
вход PSO_Pin A3 - на датчик давления масла, если кому горит (опция), на плате IN3
вход D3 - для датчиков объема или вибрации (аппаратное прерываение), на плате IN1 (опция)
вход D2 - для подключения к датчику распредвала через оптопару, если кому горит IN0 (опция)
линия L - на пин 15 K-line шины в OBDII разъёме, если такова имеется (опция)
линия K - на пин 7 K-line шины в OBDII разъёме, если такова имеется (опция)
масса GND - она же минус, для шины датчиков температуры DS18B20
провод DS18 - на линию опроса вышеупомянутых датчиков, приходит на 4й пин ардуино с подтяжкой к 3.3V
клемма 3.3V - напряжение питания датчиков температуры
клемма 12V - питание платы через предохранитель на 2А от "постоянного плюса"
клеммы REL , NO и NC - входы и выходы реле для коммутации антенны обходчика иммбилайзера
После получения команды на запуск, ардуино;
1 Обнуляет счётчик попыток запуска, в зависимости от температуры двигателя на датчике Temp0 автоматически подбирается:
Время работы стартера StTime от 1 до 6 сек
Таймер обратного отсчета Timer от 5 до 30 минут
Число повторов прогрева свечей накала (для дизелистов) о 0 до 5
в соответствии с таблицей
3 Проверяем что бы напряжение АКБ было больше 10 вольт, зажигание с ключа не включено (гарантия что двигатель не работает), температура Temp[0] выше -25, и число попыток запуска не достигло максимальных (5-ти попыток).
4 Если предыдущие условие выполненной то включаем реле первого положения замка зажигания , ожидаем 1 сек.
5 Включаем реле зажигания, ожидаем 4 сек., проверяем не было ли предыдущих неудачных попыток запуска
5.1 Eсли их было 2 и более то дополнительно выключаем/включаем зажигание на 2/8сек
5.2 Если предыдущих неудачных попыток запуска было 4 и более то дополнительно выключаем/включаем зажигание на 10/8сек
6 Проверяем не нажата ли педаль тормоза (датчик нейтрали), включаем реле стартера установленное время StTime и выключаем его.
7 Выжидаем 6 сек. на набор аккумулятором напряжения заряда от генератора.
8 Заменяем напряжение АКБ, и если измеренное напряжение выше установленного порога в 13.5 то считаем старт успешным;
включаем реле подогрева сидений подключенное к OUT5 , но только при успешном старте
отправляем смс если попыток зпуска было 2 и более
иначе возвращаемся к пункту 4, и так оставшихся 4 раза.
Обходчик представляет собой две катушки с равным количесвом витков, намотанные одним и тем же проводом, поверх антенны на замке зажигания и на ключ (чип от ключа). Катушки соеденяются последовательно, свободные концы катушек соеденяютсяc клеммами REL и NO на плате, тем самым реле при включении замыкает контур ретранслируя сигнал от чипа на штатную антенну замка зажигания.
Какие функции поддерживает прошивка
При входящем звонке с номера call_phone "снимает трубку" и проигрывает DTMF-гудок, ожидая ввода команды с клавиатуры телефона;
2. Исходящий звонок.
Звоним на номер на номер хозяина call_phone при смене потенциала 0V на +12V на клемме IN1 , к которому подключен какой нибудь тревожный датчик объема или др., жду по этому пункту идей.
123 можно заменить на свой секретный трёхзначные пароль в скетче
каждый раз когда авто завелось не с первой попытки, или вобще не завелось уходит СМС на номер SMS_phone
за 2 минуты до окончания прогрева, если до истечении времени не была нажата педаль СТОП, отправляется СМС
Privet Vasja Pupkin - имея сенсора задаваемого в шапке скетча
Temp0: 42.05 - температура датчика DS18B20 расположенного на трубках отопителя салона
Temp1: 24.01 - температура датчика DS18B20 расположенного в ногах водителя
Temp2: 15.03 - температура датчика DS18B20 расположенного снаружи автомобиля
Voltage Now: 14.23V - напряжение АКБ автомобиля в этот момент времени (заряжается)
Voltage Min: 7.81V - напряжение АКБ автомобиля в этот момент времени
Voltage for Start: 12.75V - напряжение АКБ автомобиля перед включением стартера
Timer 1 - состояние таймера обратного отсчета в минутах
Attempts 1 - Число включения стартера с последнего удачного или неудачного запуска
Uptime: 10H - время непрерывной работы ардуино в часах
И ссылка на расположение автомобиля на картах гугл если разкоментировать соответствующие строки в скетче
Расход трафика до 20 Мб в месяц c ПОБАЙТНЫМ округлением сессии, которая к слову длится 20 сек, и открывается каждых 5 минут.
6. Прием команд из приложения Народмон 2017
Команды такие же как и при входящем СМС, отличие в том что команда доходит только в момент связи с сервером от 0 до 5 минут, как повезет.
В приложении Народный мониторинг, залогинившись, перейти в УПРАВЛЕНИЕ > + > ПРОИЗВОЛЬНАЯ КОМАНДА > выбрать устройство, заполнить КОМАНДА: 123start , 123stop , или autoH .
Каждых 3 часа происходит проверка на низкую температуру:
Если температура упала ниже -18 градусов выполняем запуск двигателя на 20 минут тремя попытками.
Активация 456 и дезактивация 789 , либо нажанием педали STOP
8. Отключение зажигания по таймеру, при низком напряжении и превышении температуры выше 86 градусов
Отключение зажигания при просадке напряжения АКБ ниже 11.0V, возникает при внезапно заглохшем двигателе, за это отвечает строка
if (heating == true && Vbat < 11.0 ) heatingstop(); // остановка прогрева если напряжение просело ниже 11 вольт
За отключение при достижении температуры в 86 градусов строка
if (heating == true && TempDS[0] > 86) heatingstop(); // остановка прогрева если температура достигла 70 град
За отключение прогрева при оконсчании осчета таймера
if (heating == true && Timer <1) heatingstop(); // остановка прогрева если закончился отсчет таймера
9. Моргалка светодиодом
Каждых 10 секунд на 50 милисекунд вспихивает светодиод подключенный между out6 и +12 с последовательно подключенным резистором в 1кОм
if (heating == false) digitalWrite(ACTIV_Pin, HIGH), delay (50), digitalWrite(ACTIV_Pin, LOW); // моргнем светодиодом в режиме прогрева светодиод горит постоянно
10. Голосовое информирование о событиях в "трубку"
"Привет, жду команду" - сразу после "снятия трубки"
"Все поняла, завожу" - после ввода 123 в DTMF формате
"Включаю зажигание" - если если зажигание выключено и напряжение выше 11 вольт
"Прогреваю свечи" - в случае дополнительного прогрева свечей
"Кручу стартером" - в момент включения стартера
"Подожди" - после выключения стартера
"Двигатель заведен" - в случае успешного старта
"Упс, повторный запуск" - в случае не запуска уходя на следующую попытку
"Я на передаче" - если нажата педаль тормоза или МКПП на передаче
"Стоп" - в случае неудачного запуска при выходе из цикла
11. Геолокация по LBS. и микрофон
На основании УК РФ Статья 138.1. "Незаконный оборот специальных технических средств, предназначенных для негласного получения информации" и ч.1 ст.376 УК Беларуси "Незаконное изготовление, приобретение либо сбыт средств для негласного получения информации" запрещается вносить конструктивные изменения в устройство, а именно подпаивать микрофон и вносить изменения в прошивку, что может превратить ваше устройство в спейц средство и у вас будут проблемы с законом.
Запрещается заливать скетч с раскоментированной строками:
SIM800.print("\n https://www.google.com/maps/place/"), SIM800.print(LAT), SIM800.print(","), SIM800.print(LNG);
Хотя это не GPS треккер, но в теории модем может определять свое расположение по информации базовых станциий сотового оператора, аналогично как и в смартфонах без GPS, точность при этом составляет от 100 до 800 м, в зависимосте от местности, в городе обычно 100-200 м.
Работа прошивки с гелокацией это только теория, и ни в коем образе ниразу не опробывалось на практике, все скриншоты это плод работы в фотошоп, координаты придуманные.
Возможные проблемы и их устраниение:
Модем постоянно отваливается от сети - подать стабильное питание 3.5-4.4V c пиковым током в 3A !
После подачи питания модем не возвращает +CPIN: READY , Call Ready и SMS Ready , модем не определил скрость, решение - швырнуть в модем команду AT+IPR=9600;E1+DDET=1;+CMGF=1;+CSCS="gsm";+CNMI=2,1,0,0,0;+VTD=1;+CMEE=1;&W которая настроит в модеме скорость порта 9600, режим ЭХО, детектирование DTMF сигналов, тип кодировки СМС, автоизвещение о входящем смс, длительность тоновых сигналов, отображение ошибок и сохранит все настройки в энергонезависимую память.
если ардуино постоянно перезагружется (не снимает трубку), то навешиваем дополнительных керамических конденсаторов на 0,1мкф на шину питания 3.3V Ардуино как можно ближе к микросхеме, и заменяем спиральную антенну на выносную, вся проблема из-за ВЧ наводок от переотражения в машине
если устройство включает стартер на рабртающем двигателе то не подключен провод обратной связи FB - подключите его
если машина заводится и потом сама себе глошнет, то устройство не корректно замеряет напряжение заряда, необходима калибровка. Если напряжение в мониторе порта не соответствует действительности, то необходимо экспериментально подобрать m = 65. 72; , пока напряжение на мультиметре и в мониторе порта не окажутся приблизительно одинаковыми.
если зажигание включается , стартер крутит, но двигатель не заводится, то подберите другое количество витков на катушке импровизированного обходчика иммобилайзера
если температура с датчиков не отображется в СМС отчете, то они физически не подключены
если модуль ревизии ниже Revision:1418B04SIM800L24 то скорее всего AT+CREC работать не будет
Ссылки на мои предыдущие проекты на эту тему:
Подделка на подделку ELM327, или как еще читать температуру ДВС опыт работы с K-line шиной по протоколу ISO 14230-4 kwp связкой Arduino + L9637D
«Мне надо дистанционно открывать дверь. Вернее, отключать магнит, который держит дверь. » Вот такая неожиданная просьба, причем речь изначально шла о gsm модеме, не то чтобы я знал все подробности, но на вопрос как сделать простейший выключатель решил ответить обзором. Буквально 5-7 строчек кода и все дела.
Как и где модуль покупался я уже не помню, но специально нашел самую низкую цену при высоком рейтинге продавца.
Чем примечательна именно данная версия модема:
1. В отличие от первой версии питается от 5В и не требует никаких dc-dc преобразователей, которые, между прочим тоже стоят денег — все выполнено непосредственно на плате. А как результат меньше устройств, меньше проводов, меньше соединений.
2. Отличная внешняя антенна
3. Маленькие размеры 40х28 мм
4. Отверстия под крепление. Не всегда и не везде их делают
5. Антенну будет очень удобно крепить в корпус, судите сами, разъем крепим на корпусе, на него навинчиваем антенну, не обязательно штатную, и проводом подключаем модем.
По конструктиву все, дальше я это чудо загуглил на предмет кто-что с ним делал и скачал библиотеку SIM908IDE100, которая мне понравилась, но справедливости ради должен отметить, что она единственная которую я смотрел.
Подключение:
5В модуля на 5В ардуино
GND на GND
TXD на 2 вывод ардуино
RXD на 3 вывод ардуино
VDD не задействован
RST не задействован
Не спешите кидать тапки, потом я спросил у программиста КАК?! сделать лучше.
Принципиальная разница между первым и вторым вариантом в том, что после консультации со знающим человеком наступает просветление))) А если по нормальному, то смс заканчивается символом /r, я этого естественно не знал, поэтому сравнивал только 2 или 3 символа массива, остальная часть не учитывалась. Т.е. если послать Onnnn и On — результат будет идентичный, в последней версии этого недостатка нет.
В данном руководстве рассмотрим, как загружать данные в облако с платы TTGO T-Call ESP32 SIM800L через мобильный интернет.
Плата TTGO T-Call ESP32 SIM800L
Данная плата является модификацией платы ESP32 с модулем SIM800L GSM/GPRS.
Взаимодействовать с данной платой возможно не только по Wi-Fi и Bluetooth, но также с помощью СМС и мобильных звонков. Также возможно использовать мобильный интернет, что может быть очень удобным для IoT-проектов.
Важно: SIM800L работает в сети 2G, а она, в свою очередь, работает не везде. Проверьте покрытие вашего мобильного оператора.
Для использования данной платы вам потребуется nano-SIM карта и кабель USB Type-C для загрузки скетча.
В комплекте с платой идут несколько штыревых разъемов, коннектор питания и внешняя антенна, которую надо присоединить к плате.
Однако, антенна из комплекта плохо работала и мы заменили ее другой.
Обзор
Суть проекта заключается в загрузке данных датчика в облако используя мобильный интернет, а не Wi-Fi.
В предыдущем проекте мы создали сервер с базой данных для хранения показаний датчика.
В данном проекте мы будем загружать данные на этот сервер, хотя вы можете использовать любой другой сервис: ThingSpeak, IFTTT и др.
Если вы хотите в точности повторять наши действия, то вам следует сначала ознакомиться с предыдущим проектом.
Вот, непосредственно, суть проекта:
- Плата находится в спящем режиме;
- Затем она подключается к мобильному интернету;
- Плата выкладывает показания датчика на сервер и уходит в спящий режим.
В нашем случае время нахождения в спящем режиме – 60 секунд.
Мы будем использовать датчик BME280, однако код легко изменить под любой другой датчик.
Что нам потребуется?
Скетч для платы ESP32 мы будем писать в среде Arduino, поэтому необходимо, чтобы плата была установлена.
В данном проекте мы покажем, как загружать данные в облако. Мы используем свой домен с базой данных.
Если вы хотите в точности следовать данному руководству, то сначала нужно ознакомиться с этим руководством.
Для использования платы TTGO T-Call ESP32 SIM800L вам потребуется nano-SIM.
Ваша SIM-карта должна поддерживать подключение к мобильному интернету, поэтому нужно выставить правильные настройки APN. Обычно, оператор сотовой связи сам их предоставляет, но если нет, то найдите их на веб-сайте вашего мобильного оператора.
Для работы с проектом вам потребуется установить библиотеки Adafruit_BME280, Adafruit_Sensor и TinyGSM. Выполните следующие шаги, чтобы установить библиотеки:
Чтобы получить показания от модуля датчика BME280, мы будем использовать библиотеку Adafruit_BME280. Вам также необходимо установить библиотеку Выполните следующие шаги, чтобы установить библиотеки в вашу Arduino IDE:
- Откройте IDE Arduino и выберите Скетч> Подключить библиотеку> Управлять библиотеками. Должен открыться менеджер библиотек.
- Найдите adafruit bme280 в поле поиска и установите библиотеку.
Чтобы использовать библиотеку BME280, также необходимо установить Adafruit Unified Sensor. Выполните следующие шаги, чтобы установить библиотеку в вашу среду разработки Arduino:
Найдите Adafruit Unified Sensor в поле поиска. Прокрутите до конца, найдите библиотеку и установите ее.
В менеджере библиотек найдите библиотеку TinyGSM и установите её:
После установки всех библиотек перезапустите Arduino IDE.
Какие компоненты потребуются?
Нам потребуются следующие компоненты:
Схема
Соедините датчик BME280 с платой согласно следующей схеме:
Мы подключаем пин SDA к выходу GPIO18 и SCL к GPIO19. Мы не используем выход I2C потому, что они используются регулятором батареи платы.
Скопируйте следующий код в свой скетч, но пока не загружайте. Вам потребуется внести некоторые изменения.
Современные беспроводные технологии позволяют разрабатывать функциональные и доступные устройства. Подобные приборы взаимодействуют с широким спектром систем общего назначения. В этой статье пойдет речь об организации двухсторонней передачи данных между GSM модулем SIM800L (Рисунок 1) и полноценным веб-сервером.
Рисунок 1. | GSM модуль SIM800L. |
В сети есть много примеров использования этого модуля. Как правило, его применяют в различных системах сигнализации и удаленного управления объектами. При этом данные передаются по SMS протоколу, что совершенно неудобно с пользовательской точки зрения.
Для организации работы такой системы нам понадобятся GSM модуль SIM800L, плата Arduino Nano (Рисунок 2) и веб-сервер с доменом.
Рисунок 2. | Плата Arduino Nano. |
Принципиальная схема устройства показана на Рисунке 3.
Рисунок 3. | Принципиальная схема устройства. |
Настройка GSM модуля SIM800L
В моем случае используется оператор связи «Киевстар». Для работы с подобными устройствами был подключен тарифный план «Киевстар датчик» (Рисунок 4), ежедневная плата за который составляет 1 грн (примерно 0.04USD). При этом предоставляется 10 Мб Интернета в сутки. Для наших задач этого трафика будет достаточно.
Рисунок 4. | Тарифный план «Киевстар датчик». |
Для удобного программирования микроконтроллера платы Arduino Nano обмен данных с GSM модулем организован по программному UART с помощью стандартной библиотеки . Выводы D2-D3 назначены как Rx и Tx, соответственно.
Инициализация
Первым делом необходимо провести инициализацию и первичную настройку модуля SIM800L. Для этого в теле setup() вызываем подпрограмму init_GSM(), которая перезагружает модуль и последовательно отправляет команды:
Разберем назначение каждой команды:
На Рисунке 5 показан процесс выполнения подпрограммы init_GSM.
Рисунок 5. | Процесс выполнения подпрограммы init_GSM. |
На Листинге 1 показан пример обработки команды AT+CPAS.
Листинг 1. Программа обработки команды AT+CPAS.
Во время ответа от модуля в cycle_for() происходит сравнение и установка значения в bit_ok. Если значение равняется 1, то модуль вернул «ОК», при ответе 2 – модуль возвращает «Error». Если положительно ответа нет, то через 1 секунду повторяем отправку i раз.
Настройка GPRS соединения
После того как основная настройка модуля прошла успешно, можно начинать инициализировать GPRS соединение.
Для этого вызываем функцию init_GPRS(), которая отправляет в модуль следующие строки:
Аналогично подпрограмме init_GSM(), во всех необходимых местах проверяем положительный ответ «ОК» от модуля.
На Рисунке 6 показан процесс выполнения подпрограммы init_GPRS().
Рисунок 6. | Процесс выполнения подпрограммы init_GPRS(). |
На этом этапе работу с модулем можно завершить. Для последующей работы необходимо настроить сервер и создать соответствующие файлы для обмена данными.
Создание файлов и работа с веб-сервером
Чтобы принять данные с GSM модуля, нужно приобрести услугу хостинга с минимальными требованиями, главное, чтобы была поддержка PHP. PHP – это популярный язык программирования, который исполняется на стороне сервера, в то время как JavaScript исполняется в браузере на стороне пользователя.
В качестве примера сделаем удаленное управление поливом теплицы.
Распишем основные задачи для веб-сервера и GSM модуля.
Задачи веб-сервера:
- Принимать и отображать на веб-странице данные температуры, времени работы и статус насоса;
- Предоставлять данные GSM модулю о статусе вкл/выкл насоса.
Задачи GSM модуля:
- Отправлять данные о времени работы насоса полива;
- Отправлять температуру насоса и воды;
- Принимать данные с веб-сервера о статусе вкл/выкл насоса.
Первым делом в корневом каталоге сервера создаем файл index.php.
На Листинге 2 показан начальный код разметки HTML страницы.
Листинг 2. Начальный код разметки HTML страницы.
В моем случае веб-страница будет открываться только в телефоне, поэтому выберем самый простой дизайн для нее. При желании можно сделать страницу более удобной и информативной.
Результат открытого в браузере файла index.php показан на Рисунке 7.
Рисунок 7. | Результат открытого в браузере файла index.php. |
Добавим пару кнопок на включение насоса и создадим txt файл на сервере для сохранения данных о статусе работы насоса. Кнопки выполним в виде картинок, а их обработку сделаем с помощью AJAX (технология взаимодействия с сервером без полной перезагрузки html-страницы, использует JavaScript). Для этого перед тегом вставляем код, показанный в Листинге 3.
Листинг 3. AJAX обработчик.
Определение картинок кнопок включим в форму. При нажатии на картинку будет записываться значение статуса в файл pomidor.txt. Код обработки кнопок показан в Листинге 4.
Листинг 4. HTML код обработки кнопок.
В коневом каталоге создаем папку transfer и файл pomidor.php, код из которого приведен в Листинге 5.
Листинг 5. PHP скрипт записи статуса кнопки.
Рисунок 8. | Основной интерфейс управления. |
Для полученных значений создаем еще одну папку txt и файл pomidor.txt. Добавляем картинку насоса и получаем минимальный интерфейс управления, который показан на Рисунке 8. На Рисунке 9 показан результат нажатия на кнопку «Выкл». Соответственно, если нажмем на кнопку «Вкл», то будет результат «ON».
Рисунок 9. | Запись данных на сервер в результате нажатия на кнопку «Выкл». |
Сделаем так, чтобы при переключении статуса, менялась картинка насоса. Для этого в поле расположения картинки насоса добавим код (Листинг 6).
Листинг 6. PHP скрипт изменения картинки статуса работы насоса.
Создаем функцию «Nasos», которая каждую секунду читает и сравнивает значение с файла pomidor.txt. В зависимости от результата меняется картинка визуализации насоса. На Рисунке 10 показан пример визуализации насоса при нажатии на кнопку «Вкл».
Рисунок 10. | Визуализация статуса включенного насоса. |
По аналогии добавим вывод температур и времени полива (Рисунок 11).
Рисунок 11. | Законченный интерфейс управления. |
Вопросы безопасности, в случае атаки на веб сервер, выходят за рамки данного повествования, поэтому опустим их.
Считываем данные с сервера в Arduino
После завершения процесс отладки записи статуса вкл/выкл насоса в файл pomidor.txt можно считывать данные в Arduino. Напишем функцию чтения данных с сервера (Листинг 7).
Листинг 7. Функция чтения данных с сервера.
Прочитаем статус вкл/выкл насоса из файла txt/pomidor.txt, отобразим значение на терминале и на выводе D5 платы Arduino (Листинг 8).
Листинг 8. Программа формирования логического уровня вывода D5 в зависимости от статуса насоса.
Пример отображения при нажатии кнопки включении насоса показан на Рисунке 12.
Рисунок 12. | Пример отображения при нажатии кнопки «Вкл» насоса. |
Передача данных из Arduino на веб-сервер
Для передачи данных на веб-сервер напишем функцию SEND_GPRS с указанием адреса "adress_php", в который будет записываться значение int типа "out_messeng_Server". Для записи значения типа String нужно вызывать функцию SEND_string_GPRS. В Листинге 9 показана функция отправки данных на сервер.
Листинг 9. Функция отправки данных на сервер.
В корневом каталоге веб-сервера создаем папку in, внутри ее располагаем другие папки со скриптами для обработки приема данных GSM модуля. Внутренние папки содержат файл index.php и log.txt.
На Листинге 10 показано содержание файла index.php.
Листинг 10. PHP листинг файла index.php.
Как видно, с приходом новых данных происходит перезапись файла log.txt.
Рисунок 13. | Собранная схема на макетной плате. |
Все компоненты собраны на макетной плате (Рисунок 13). Устройство не требует настроек, после сборки и прошивки сразу готово к работе.
Читайте также: