Предыдущую статью мы закончили на том, что нам нужно придать нашей магической схеме немного «сообразительности» :) т. е. наделить её разумом. Все знают произведение Волкова «Волшебник изумрудного города», где девочка Элли со своим пёсиком Тотошкой, а также львом, железным дровосеком и страшилкой шли к великому Гудвину.
А помните зачем они к нему шли?... Элли то просто хотела вернуться домой, а остальные? Правильно! Железному дровосеку нужно было сердце, Страшиле — ум, а льву не хватало смелости.
Так вот, будем считать, что наша схема это и есть эта счастливая троица.
Вся аппаратная часть - это железный дровосек и ему нужно сердце, в нашем случае - это связь с источником великой магической энергии (розеткой). В качестве Страшилы у нас выступает программная часть нашего "магического проекта", поэтому ей от нас нужен ум - соответственно, на нашем языке программа. В качестве льва выступаем мы сами, т.к. нам для всего этого нужна смелость :)) Волшебником - в данном случае выступает время, т.к. настоящее волшебство, как мы уже отмечали в предыдущей части нашей статьи, растянуто во времени - нам нужно время, чтобы разобраться в теоретической, и подготовить практическую части нашего проекта.
«Набросок» железного дровосека у нас был готов в предыдущей публикации. Итак, давайте займёмся разумом нашего создания, для этого прибегнем к помощи интернета, и немножечко к собственному опыту.
Программа связи Arduino по wi-fi взята с сайта-форума. Для программирования Arduino можно взять любое IDE, например, его родное с сайта производителя.
Для подключения нашей Arduino к сети wi-fi используем плату расширения wi-fi shield.
#include <SPI.h> #include <WiFi.h> char ssid[] = "myNetwork"; // сеть SSID (имя) char pass[] = "myPassword"; // пароль int status = WL_IDLE_STATUS; char servername[]="google.com"; // удаленный сеовео WiFiClient client; void setup() { Serial.begin(9600); Serial.println("Соединение с WPA сетью..."); Serial.print("SSID: "); Serial.println(ssid); status = WiFi.begin(ssid, pass); if ( status != WL_CONNECTED) { Serial.println("Невозможно выполнить wi-fi соединение"); // Ничего не делаем, если while(true); } else { Serial.println("Подключены к wifi"); Serial.println("\nНачинаем соединение..."); // Если подключиться получилось, возвращаем: if (client.connect(servername, 80)) { Serial.println("Соединение установлено"); // Выполняем HTTP запрос: client.println("GET /search?q=arduino HTTP/1.0"); client.println(); } } }
А функцию loop напишем сами. Каким образом?... Очень просто. Что нам нужно? Чтобы наш контроллер постоянно проверял наличие сигналов включения/выключения лампочки от нашей волшебной палочки — смартфона :)
int nLampPin = 1; void loop() { If (Serial.SignalOnOff) { digitalWrite(nLampPin, HIGH); } else { digitalWrite(nLampPin, LOW); { }
Придумываем всё на ходу, поэтому, пожалуйста, в комментариях поправьте, если что не так — будем очень благодарны!
Перепрошиваем наш Arduino... Ура! Готово!
Итак, набросок схемы «железного человека», как мы уже говорили, есть. «Ум для Страшилы» приготовлен, теперь немного смелости и сноровки — соединяем схему и подключаемся к источнику «великой магии» :)) Нам правильно в комментариях к предыдущей статье написали, что 220 В - не игрушки для школьников, поэтому давайте будем использовать, например, лампочку, запитанную от батарейки, как раз кстати, нашёл хорошее изображение на просторах интернета...


Вместо ключа управлением включением/выключением нашей лампочки будет заниматься реле (в предыдущей статье мы говорили о Fotek SSR-40DA), подключенное к Arduino с платой расширения Wi-Fi.
Осталось теперь научить нашу "волшебную палочку" включать лампочку, для этого не будем использовать сложные инструменты. Воспользуемся удобным мобильным IDE — DroidScript с поддержкой волшебного языка JavaScript. Грубо говоря, для реализации простейшего интерфейса нам потребуются экран всего с двумя кнопками — "Вкл. и Выкл.", или, для упрощения, вообще только с одной кнопкой для обоих функций.
Код программы возьмём из примеров в самом DroidScript для последовательного интерфейса, и немножечко переделаем его под наш случай для wi‑fi:
function OnStart() { //Создание графических объектов lay = app.CreateLayout( "linear", "VCenter,FillXY" ) //Создаем кнопку btn = app.CreateToggle( "ВКЛ/ВЫКЛ", 0.4 ) btn.SetOnTouch( btn_OnTouch ) lay.AddChild( btn ) app.AddLayout( lay ) //Создаем wifi объект wifi = app.CreateWIFISerial() if( !wifi ) { app.ShowPopup( "Пжл подключите Arduino и перезапустите его..." ) return; } wifi.SetOnReceive( wifi_OnReceive ) app.ShowPopup( "Соединение установлено" ) } //Запускаем функцию при нажатии кнопки function btn_OnTouch( isChecked ) { if( !wifi ) return; //Посылаем команду включения лампочки на Arduino if( isChecked ) wifi.Write( "ledh") else wifi.Write( "ledl") } //Вызываем функцию при получении данных о. Arduino function usb_OnReceive( data ) { console.log( data ) }
Вот и всё, и чем скажите мне, это не настоящее волшебство, которое под силу любому школьнику?! И это только начало, ведь постепенно углубляясь в физику, математику и информатику можно научиться более серьезным заклинаниям. И для этого не нужно даже ехать в Хогвартс, достаточно почитать литературу и включить собственное воображение.
Приносим извинения, если что то не работает, всё-таки мы пишем теоретическую часть "Современной магии", а она больше направлена на включение воображения, и наши возможности в принципе. Мы лишь хотим обобщить свой опыт, и дать советы и вдохновение молодым начинающим волшебникам :)
Ведь посмотрите, в такой простой задачке - а как правильно написали в комментариях к 1-ой части данной статьи - это просто "мигающий светодиод", мы умещаем основы физики, математики, информатик��, и даже литературы. Если бы в своё время в школе мне также преподавали все эти предметы. В своём случае, зачем нужны многие предметы, я понял лишь спустя годы после окончания ВУЗа. Но может быть, так оно и было нужно, зато теперь так приятно их смешивать, дозировать между собой - а ведь это уже химия... ))
Так давайте же постигать современную магию вместе, можете сами предлагать заклинания и темы - будем вместе думать, как их можно реализовать, используя современные инструменты и технологии. До встречи на следующих занятиях :))
Всем добрых мыслей :))
