Современная магия для школьников ч. 2

Предыдущую статью мы закончили на том, что нам нужно придать нашей магической схеме немного «сообразительности» :) Т.е. наделить её разумом. Все знают произведение Волкова «Волшебник изумрудного города», где девочка Элли со своим псом Тотошкой, а также львом, железным дровосеком и страшилкой шли к великому Гудвину.

А помните зачем они к нему шли?) Элли то просто хотела вернуться домой, а остальные? Правильно! Железному дровосеку нужно было сердце, Страшиле — ум, а льву не хватало смелости.

Так вот, будем считать, что наша схема это и есть эта счастливая троица. 

Вся аппаратная часть — это железный дровосек и ему нужно сердце, в нашем случае — это связь с источником великой магической энергии (розеткой). В качестве Страшилы у нас выступает программная часть магического проекта, поэтому ей от нас нужен ум — соответственно, на нашем языке программа. В качестве льва и одновременно Гудвина выступаем мы сами, т.к. нам для всего этого нужна смелость, но и волшебниками выступаем мы сами :)

«Набросок» железного дровосека у нас готов в предыдущей публикации. Итак, давайте займёмся разумом нашего создания, для этого прибегнем к помощи интернета, и немножечко к собственному опыту.

Программа связи Arduino по wi-fi взята с сайта-форума. https://www.arduino.cc/reference/en/libraries/wifi/client.connect/

Для подключения нашей Arduino к сети wi-fi используем плату расширения wi-fi shield.

#include

#include

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)

}

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

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

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

© Habrahabr.ru