Предыдущую статью мы закончили на том, что нам нужно придать нашей магической схеме немного "сообразительности" :) Т.е. наделить её разумом. Все знают произведение Волкова "Волшебник изумрудного города", где девочка Элли со своим псом Тотошкой, а также львом, железным дровосеком и страшилкой шли к великому Гудвину.
А помните зачем они к нему шли?) Элли то просто хотела вернуться домой, а остальные? Правильно! Железному дровосеку нужно было сердце, Страшиле - ум, а льву не хватало смелости.
Так вот, будем считать, что наша схема это и есть эта счастливая троица.
Вся аппаратная часть - это железный дровосек и ему нужно сердце, в нашем случае - это связь с источником великой магической энергии (розеткой). В качестве Страшилы у нас выступает программная часть магического проекта, поэтому ей от нас нужен ум - соответственно, на нашем языке программа. В качестве льва и одновременно Гудвина выступаем мы сами, т.к. нам для всего этого нужна смелость, но и волшебниками выступаем мы сами :)
"Набросок" железного дровосека у нас готов в предыдущей публикации. Итак, давайте займёмся разумом нашего создания, для этого прибегнем к помощи интернета, и немножечко к собственному опыту.
Программа связи Arduino по wi-fi взята с сайта-форума. https://www.arduino.cc/reference/en/libraries/wifi/client.connect/
Для подключения нашей 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. Ура!
Итак, набросок схемы "железного человека", как мы уже говорили, есть. "Ум для Страшилы" приготовлен, теперь немного смелости и сноровки - соединяем схему и подключаемся к источнику "великой магии" :))
Осталось теперь научить нашу волшебную палочку включать лампочку, для этого не будем использовать сложные инструменты. Воспользуемся удобным мобильным 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 )
}
Вуаля, и чем скажите мне, это не настоящее волшебство, которое под силу любому?! И это только начало, ведь постепенно углубляясь в физику, математику и информатику можно научиться более серьезным заклинаниям. И для этого не нужно даже ехать в Хогвартс, достаточно почитать литературу и включить собственное воображение.
Приносим извинения, если что то не работает, т.к. пока писали теоретическую часть магической науки.
Давайте постигать современную магию вместе, можете сами предлагать заклинания, и будем вместе думать, как их можно реализовать, используя современные инструменты и материалы. До встречи на следующих занятиях :))
Автор: 6afia9oftware