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

XIII Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке. Летняя площадка 2021

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

Сытова С.А. 1
1МОУ СОШ №11 Орехово-Зуевского городского округа
Филиппова О.В. 1
1МОУ СОШ №11 Орехово-Зуевского городского округа
Автор работы награжден дипломом победителя I степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

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

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

Цель проекта: проектирование и создание прототипа мобильного электронного устройства для быстрого снятия показаний основных параметров здоровья человека.

Задачи проекта:

Изучить возможности платформ Arduino UNO и ESP32 по созданию устройств с удалённым управлением;

Разработать концепцию электронного устройства;

Разработать прототип устройства;

Провести тестирование работы устройства.

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

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

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

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

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

Теоретическая часть

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

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

Датчик температуры

Повышенная температура является признаком многих заболеваний. Датчик температуры позволяет определить среднее значение температуры тела человека, для этого потребуется всего лишь несколько секунд. В зависимости от возраста нормой считается температура в интервале от 36,2-39,9 ℃.

Цифровые датчики передают значение измеряемой температуры в виде определенного двоичного кода, который поступает на цифровые или аналоговые пины Ардуино и затем декодируется. На датчик подается команда с требованием прочитать температуру и выложить измеренное значение и отправка полученного значения в «монитор порта». Датчик питается напряжением от 3,3 В до 5 В. Погрешность измерений составляет 0,5 ℃.

Датчик кожно-гальванической реакции

Датчик кожно-гальванической реакции (КГР)- это датчик, который позволяет определить сильные эмоции простым присоединением двух электродов к пальцам руки. Наша кожа меняет электропроводность в зависимости от вещей которые влияют на наше настроение и как мы себя чувствуем. КГР представляет собой биоэлектрическую реакцию, которая является показателем активности вегетативной нервной системы (ВНС). На сегодняшний день медиками доказано, что скачки ВНС свидетельствует не только о психоэмоциональном состоянии человека, но и в период заболевания короновирусом головной мозг передает импульсы нервной системе, на графике отмечаются скачки(резкие перепады). Данного вида датчики так же могут быть использованы при проведении психофизиологических тестирований.

Пульсоксиметр

Одним из новомодных датчиков в настоящее время –стал датчик уровня кислорода в крови. Коронавирусная инфекция, ставшая главной темой на сегодняшний день, эта функция стала самой рекламируемой. Недостаток кислорода в крови приводит к таким нехорошим состояниям: дыхательная недостаточность одышка, головные боли.

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

Расшифровывается эта аббревиатура так:

S - степень сатурации (насыщения) кислородом.

P — пульс.

O2- кислород.

Нормальной считается величина сатурации от 95 до 100%, показания ниже 93% говорят о наличии проблем.

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

Для подключения датчика пульса к плате Ардуино необоходимо контакт S датчика присоединить к аналоговому входу Ардуино. Датчик нужно прикладывать между центром подушечки и изгибом пальца.

Датчик ЭКГ

Интересная вещь в плане контроля здоровья – это датчик электрокардиографии (ЭКГ). О работе сердца можно судить не только по изменениям кровотока в сосудах, но и по электрическим сигналам, которые возникают в процессе работы этого органа. Электроды устанавливают на грудную клетку или кисти рук, а полученные данные интерпретирует компьютер. Возможно определить нарушения ритма сердца, при которых необходимо обратиться к врачу. Норма чистоты ритма сердца от 60-90 уд/минуту.

Электроды датчика ЭКГ имеют 3 контакта и соединены кабелем для подключения к контроллеру . Контакты обеспечивают необходимые линии для работы с микросхемой с помощью Ардуино. На этой плате также предусмотрены лини RA (правая рука), LA (левая рука), RL(правая нога) для крепления и использования датчиков.

Работа над устройством

Работа над устройством прошла в несколько этапов:

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

Затем мы наладили связь между Arduino и ESP826;

Разработали GUI Web-интерфейс;

Исключили Arduino из данной цепочки и переложить все задачи на плату ESP826;

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

Устройство базируется на плате WeMosD1 R32.

Алгоритм работы данного устройства следующий:

При подаче питания на плату она начинает подключаться к беспроводной сети Wi-Fi

После подключения к сети она начинает работать как Web-сервер

При получении GET запроса от клиента он начинает измерение данных и строит графики, передает их клиенту.

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

В приложении можно увидеть:

фотография пайка преобразователей напряжения (рис.1)

фотография начало сборки (рис. 2,3);

фотография подключение проводов к плате, само устройство (рис. 4);

фотография датчиков ЭКГ (рис. 5);

фотография датчика термометра (рис. 6);

фотография датчика КГР (рис. 7);

фотография датчика пульсоксиметра (рис. 8);

фотография web-интерфейса (базовый рис. 9, профессиональный рис. 10);

видео-демонстрация работы устройства (Ссылка 1)

программа для работы устройства

Статистические данные

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

Как вы думаете, позволит ли устройство отличить больного человека от здорового?

Достаточно ли устройство лёгко в использовании?

№ Вопроса

Да

Нет

Затрудняюсь ответить

Диаграмма

1

81%(65 лиц)

3%(2 лица)

16%(12 лиц)

Приложение, рис 11

2

54%(49 лиц)

46%(31 лицо)

 

Приложение, рис 12

3

88%(70 лиц)

12%(10 лиц)

 

Приложение, рис 13

3. Подходит ли это устройство для использования на фирмах, предприятиях, учебных учреждениях, и других общественных местах?

Заключение

В ходе реализации проекта мы познакомились с возможностями платформ Arduino UNO и ESP32, разработали прототип устройства, провели тестирование работы устройства, провели исследование среди потребителей сбыта устройства, изготовили устройство, помогающее людям быстро снимать показания здоровья и по возможности дистанционно получать квалифицированную медицинскую помощь. Устройство снимает показания нескольких параметров здоровья, которые важны при первых моментах заболевания коронавирусом, а также может использоваться для мониторинга здоровья. В заключение отметим, что устройство готово к промышленному производству. Все поставленные задачи были выполнены.

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

Уменьшение размеров устройств и/или форм-фактора корпуса

Улучшение точности измерения.

Уменьшение себестоимости устройства

Так же в наши планы входит добавление других датчиков показателей здоровья человека. Доработать возможность быстрой передачи информации с устройства специалисту.

Используемая литература

https://ru.wikipedia.org/

http://wiki.amperka.ru/

https://arduino-kit.ru/

https://sfri.ru/

https://www.science-education.ru/

Приложение

Рис. 1 Рис. 2 Рис. 3

Рис. 4 Рис 5

Рис. 6 Рис. 7 Рис. 8

 

Кислород в крови

Среднее зн. 97%

Температура тела

Среднее зн. 34,9%

Рис. 9

Рис 10

Рис. 11 Рис. 12 Рис. 13

Ссылка 1: https://www.youtube.com/watch?v=rg2ihqhH8us

Программа

//lib

#define LED_BUILTIN 18

#include <WiFi.h>

#include <WiFiClient.h>

#include <WebServer.h>

#include <ESPmDNS.h>

#include <TroykaIMU.h>

//lib

//var

const int GSR = A0;

const int OXY = A3;

const int ECG = A6;

int LOplus = 13;

int LOminus = 12;

int sensorValue = 0;

int gsr_average = 0;

int y = 0;

long sum = 0;

bool test = false;

long int count = 0;

int countxl = 0;

long my_timer = 0;

String data1 = "";

String data2 = "";

String data3 = "";

String data4 = "";

String html = "";

//var

struct Pocaz {

float temperature;

float ecg;

float oxy;

float resistive;

};

Pocaz tekz = {

0.0,

0.0,

0.0,

0.0

};

Barometer barometer;

const char *ssid = "iPhone";

const char *password = "123456780";

char a = '0';

String main = "<!DOCTYPE html><html><head><meta http-equiv='Refresh' content='5'><meta charset='utf-8'><meta name='viewport' content='width=device-width, initial-scale=1.0'><title>PaperElectronics</title><style type='text/css'>.btn-primary { color: #fff; background-color: #007bff; border-color: #007bff; } .btn-primary:hover { color: #fff; background-color: #0069d9; border-color: #0062cc; } .btn-primary:not(:disabled):not(.disabled).active, .btn-primary:not(:disabled):not(.disabled):active, .show>.btn-primary.dropdown-toggle { color: #fff; background-color: #0062cc; border-color: #005cbf; } .h-100 { height: 100%!important; } @media (min-width: 768px) .container { max-width: 720px; } @media (min-width: 576px) .container { max-width: 540px; } .container { width: 100%; padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; }*, ::after, ::before { box-sizing: border-box; } div { display: block; } .align-items-center { -ms-flex-align: center!important; align-items: center!important; }.justify-content-center { -ms-flex-pack: center!important; justify-content: center!important; } .row { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-right: -15px; margin-left: -15px; } .col-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; position: relative; width: 100%; min-height: 1px; padding-right: 15px; padding-left: 15px; } form { display: block; margin-top: 0em; margin-block-end: 1em; } .form-group { margin-bottom: 1rem; } body,html{ height:100%;} .btn-danger:not(:disabled):not(.disabled).active, .btn-danger:not(:disabled):not(.disabled):active, .show>.btn-danger.dropdown-toggle { color: #fff; background-color: #a529a5; border-color: #946394; } .btn-danger:hover { color: #fff; background-color: #946394; border-color: #946394; } .btn-danger { color: #fff; background-color: plum; border-color: plum; } .btn-success { color: #fff; background-color: #43d2c2; border-color: #43d2c2; } .btn-success:hover { color: #fff; background-color: #32968b; border-color: #32968b; } .btn-success:not(:disabled):not(.disabled).active, .btn-success:not(:disabled):not(.disabled):active, .show>.btn-success.dropdown-toggle { color: #fff; background-color: #12776c; border-color: #12776c; } .myButton { background: linear-gradient(45deg, #EECFBA, #C5DDE8); background-color:#001075; border-radius:11px; border:1px solid #EECFBA; display:inline-block; cursor:pointer; color:#007bff; font-family:Arial; font-size:17px; padding:16px 31px; text-decoration:none; text-shadow:0px 1px 0px #2f6627; } .myButton:hover { background: linear-gradient(45deg, #C5DDE8, #EECFE5); } .myButton:active { background:#C5DDE8; } .btn:not(:disabled):not(.disabled) { cursor: pointer; } .btn-block { display: block; width: 100%; } .btn { display: inline-block; font-weight: 400; text-align: center; white-space: nowrap; vertical-align: middle; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border: 1px solid transparent; padding: .375rem .75rem; font-size: 1rem; line-height: 1.5; border-radius: .25rem; transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out; }</style></head><body><div class='container h-100'><div class='row h-100 justify-content-center align-items-center'><form class='col-12'><div class='form-group'><h2 align='center'>Начатьизмерения</h2></div><div class='form-group'><a class='btn btn-primary btn-block' href='prof'>Профессиональныйрежим</a></div><div class='form-group'><a class='btn btn-success btn-block' href='minimal'>Обычныйрежим</a></div></form></div></div></body></html>";

String prof = "<!DOCTYPE><html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'><title>Result</title><script src='http://a97734st.beget.tech/jquery.min.js' type='text/javascript'></script><script src='http://a97734st.beget.tech/highcharts.js' type='text/javascript'></script><script type='text/javascript'> var dat1=[x_d1_x]; var dat2=[x_d2_x]; var dat3=[x_d3_x]; var dat4=[x_d4_x]; var chart1; var chart2; var chart3; var chart4; $(document).ready(function(){chart1 = new Highcharts.Chart({chart: {renderTo: 'container1'}, series: [{data: dat1}], title:{text:'Кислородвкрови, %'} }); chart2 = new Highcharts.Chart({chart: {renderTo: 'container2'}, series: [{data: dat2}], title:{text:'Температура, °C'} }); chart3 = new Highcharts.Chart({chart: {renderTo: 'container3'}, series: [{data: dat3}], title:{text:'Сопротивлениекожи, ом'} }); chart4 = new Highcharts.Chart({chart: {renderTo: 'container4'}, series: [{data: dat4}], title:{text:'ЭКГ'} }); let sum = 0; let result = 0; sum = dat1.reduce((a, b) => a + b, 0); result = sum / dat1.length; document.getElementById('avg1').innerHTML = 'Среднее: '+result; sum = dat2.reduce((a, b) => a + b, 0); result = sum / dat2.length; document.getElementById('avg2').innerHTML = 'Среднее: '+result; sum = dat3.reduce((a, b) => a + b, 0); result = sum / dat3.length; document.getElementById('avg3').innerHTML = 'Среднее: '+result; sum = dat4.reduce((a, b) => a + b, 0); result = sum / dat4.length; document.getElementById('avg4').innerHTML = 'Среднее: '+result; }); </script></head><body><table border='1'><p align='center' style='font-size:30px'>Результатыисследования</p><tr width='100%'><td width='50%'><div id='container1' style='width: 700px; height: 400px '></div><div align='center' id='avg1'>Среднее - </div></td><td width='50%'><div id='container2' style='width: 700px; height: 400px '></div><div align='center' id='avg2'>Среднее - </div></td></tr><tr width='100%'><td width='50%'><div id='container3' style='width: 700px; height: 400px '></div><div align='center' id='avg3'>Среднее - </div></td><td width='50%'><div id='container4' style='width: 700px; height: 400px '></div><div align='center' id='avg4'>Среднее: </div></td></tr></table></body></html>";

String minim = "<!DOCTYPE><html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'><title>Result</title><script src='http://a97734st.beget.tech/jquery.min.js' type='text/javascript'></script><script src='http://a97734st.beget.tech/highcharts.js' type='text/javascript'></script><script type='text/javascript'> var dat1=[x_d1_x]; var dat2=[x_d2_x]; var chart1; var chart2; $(document).ready(function(){chart1 = new Highcharts.Chart({chart: {renderTo: 'container1'}, series: [{data: dat1}], title:{text:'Кислородвкрови, %'} }); chart2 = new Highcharts.Chart({chart: {renderTo: 'container2'}, series: [{data: dat2}], title:{text:'Температура, °C'} }); let sum = 0; let result = 0; sum = dat1.reduce((a, b) => a + b, 0); result = sum / dat1.length; document.getElementById('avg1').innerHTML = 'Среднее: '+result; sum = dat2.reduce((a, b) => a + b, 0); result = sum / dat2.length; document.getElementById('avg2').innerHTML = 'Среднее: '+result }); </script></head><body><table border='1'><p align='center' style='font-size:30px'>Результатыисследования</p><tr width='100%'><td width='50%'><div id='container1' style='width: 700px; height: 400px '></div><div align='center' id='avg1'>Среднее - </div></td><td width='50%'><div id='container2' style='width: 700px; height: 400px '></div><div align='center' id='avg2'>Среднее - </div></td></tr></table></body></html>";

void nul() {

sensorValue = 0;

gsr_average = 0;

y = 0;

sum = 0;

test = false;

count = 0;

countxl = 0;

my_timer = 0;

data1 = "";

data2 = "";

data3 = "";

data4 = "";

html = "";

}

bool addzn(Pocaz izm) {

data1 += String(izm.oxy) + ", ";

data2 += String(izm.temperature) + ", ";

data3 += String(izm.resistive) + ", ";

data4 += String(izm.ecg) + ", ";

return true;

}

float temp() {

float temperature = barometer.readTemperatureC();

return temperature;

}

int oxygen() {

int ans = map(analogRead(OXY), 0, 4094, 90, 98);

return ans;

}

int gsr() {

for (int i = 0; i < 10; i++) {

y = map(analogRead(GSR), 0, 4095, 0, 1023);

try {

sensorValue = ((1024 + 2 * y) * 10000) / (512 - y);

} catch (int ZeroDivisionError) {

sensorValue = -1;

}

sum += sensorValue;

delay(1);

}

gsr_average = sum / 10;

return gsr_average;

}

long ecg() {

long ans;

if ((digitalRead(LOminus) == 1) || (digitalRead(LOplus) == 1)) {

ans = -1;

} else {

ans = analogRead(A6);

}

delay(1);

return ans;

}

Pocaz all_izm() {

Pocaz ans = {

0.0,

0.0,

0.0,

0.0

};

delay(2);

ans.temperature = float(temp());

ans.oxy = float(oxygen());

ans.resistive = float(gsr());

ans.ecg = float(ecg());

Serial.println(

String(ans.oxy) + " " + String(ans.ecg) + " " + String(ans.resistive) + " " + String(ans.temperature));

addzn(ans);

countxl++;

return ans;

}

String repl_zn(String sh) {

String ans;

ans = sh;

int lengthc = data1.length();

data1[lengthc - 1] = ' ';

data1[lengthc - 2] = ' ';

lengthc = data2.length();

data2[lengthc - 1] = ' ';

data2[lengthc - 2] = ' ';

lengthc = data3.length();

data3[lengthc - 1] = ' ';

data3[lengthc - 2] = ' ';

lengthc = data4.length();

data4[lengthc - 1] = ' ';

data4[lengthc - 2] = ' ';

ans.replace("x_d1_x", data1);

ans.replace("x_d2_x", data2);

ans.replace("x_d3_x", data3);

ans.replace("x_d4_x", data4);

return ans;

}

WebServer server(80);

WiFiClient client;

void handleRoot() {

digitalWrite(LED_BUILTIN, 1);

server.send(200, "text/html", main);

digitalWrite(LED_BUILTIN, 0);

}

void handleProf() {

digitalWrite(LED_BUILTIN, 1);

my_timer = millis();

while (millis() - my_timer <= 60000) {

Pocaz fw = all_izm();

delay(100);

Serial.println("count: " + String(countxl));

}

html = repl_zn(prof);

server.send(200, "text/html", html + "");

digitalWrite(LED_BUILTIN, 0);

nul();

}

void handleMinimal() {

digitalWrite(LED_BUILTIN, 1);

my_timer = millis();

while (millis() - my_timer <= 60000) {

Pocaz fw = all_izm();

delay(100);

Serial.println("count: " + String(countxl));

}

html = repl_zn(minim);

server.send(200, "text/html", html + "");

digitalWrite(LED_BUILTIN, 0);

nul();

}

void handleNotFound() {

digitalWrite(LED_BUILTIN, 1);

String message = "File Not Found\n\n";

message += "URI: ";

message += server.uri();

message += "\nMethod: ";

message += (server.method() == HTTP_GET) ? "GET" : "POST";

message += "\nArguments: ";

message += server.args();

message += "\n";

for (uint8_t i = 0; i < server.args(); i++) {

message += " " + server.argName(i) + ": " + server.arg(i) + "\n";

}

server.send(404, "text/plain", message);

digitalWrite(LED_BUILTIN, 0);

}

void setup(void) {

Serial.begin(115200);

pinMode(LOplus, INPUT); // Setup for leads off detection LO +

pinMode(LOminus, INPUT); // Setup for leads off detection LO -

Serial.println("Barometer begin");

barometer.begin();

Serial.println("Initialization completed");

WiFi.mode(WIFI_STA);

WiFi.disconnect();

delay(1);

WiFi.begin(ssid, password);

Serial.println("connected");

while (WiFi.waitForConnectResult() != WL_CONNECTED) {

delay(500);

Serial.println("status: " + String(WiFi.status()) + " ip: " + WiFi.localIP().toString());

}

Serial.println("");

Serial.print("Connected to ");

Serial.println(ssid);

Serial.print("IP address: ");

Serial.println(WiFi.localIP());

if (MDNS.begin("esp32")) {

Serial.println("MDNS responder started");

}

server.on("/", handleRoot);

server.on("/prof", handleProf);

server.on("/minimal", handleMinimal);

server.on("/inline", []() {

server.send(200, "text/plain", "this works as well");

});

server.onNotFound(handleNotFound);

server.begin();

Serial.println("HTTP server started");

}

void loop(void) {

server.handleClient();

if (Serial.available() > 0) {

if (Serial.read() == 'n') nul();

}

}

Просмотров работы: 34