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

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

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

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

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

Программа связи Arduino по wi-fi взята с сайта-форума.

Для подключения нашей 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 )

}

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

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

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

Комментарии (8)


  1. kalapanga
    26.09.2024 14:47
    +12

    Что ж Вы, автор, так детей-то не любите? Почему Вы считаете, что статья для них должна состоять из уродской мазни во весь экран и неоформленного кода?


    1. 6afia9oftware Автор
      26.09.2024 14:47

      Большое спасибо за комментарий! Статья выполнена в формате урока, т.е. все написанное и нарисованное должно выглядеть, как-будто на школьной доске)


      1. kalapanga
        26.09.2024 14:47

        То есть на доске можно рисовать наскальную живопись вместо понятных иллюстраций и писать бессмысленный и нерабочий код?


      1. kuzzdra
        26.09.2024 14:47

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


  1. NekkittAY
    26.09.2024 14:47
    +2

    И для этого не нужно даже ехать в Хогвартс, достаточно почитать литературу и включить собственное воображение.

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


    1. 6afia9oftware Автор
      26.09.2024 14:47

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


      1. kuzzdra
        26.09.2024 14:47

        Школьные уроки все же начинаются с базы. Сначала кружочки и палочки, потом буквы, потом слова и предолжения, потом сочинение. Если сразу сочинение - получится ***ня, сорри за японский.


  1. randomsimplenumber
    26.09.2024 14:47

    Serial.SignalOnOff

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

    // удаленный сеовео

    client.println("GET /search?q=arduino HTTP/1.0");

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

    Почему то вспомнилось вступление из ЮжПарка. Не рекомендуется читать никому, наверное и писать это не стоило. Магия в статье действительно есть. Только она вне Хогвартса не работает. А понять, почему она не работает, target group не сможет из за отсутствия опыта.