• Guest
HabraHabr
  • Main
  • Users

  • Development
    • Programming
    • Information Security
    • Website development
    • JavaScript
    • Game development
    • Open source
    • Developed for Android
    • Machine learning
    • Abnormal programming
    • Java
    • Python
    • Development of mobile applications
    • Analysis and design of systems
    • .NET
    • Mathematics
    • Algorithms
    • C#
    • System Programming
    • C++
    • C
    • Go
    • PHP
    • Reverse engineering
    • Assembler
    • Development under Linux
    • Big Data
    • Rust
    • Cryptography
    • Entertaining problems
    • Testing of IT systems
    • Testing Web Services
    • HTML
    • Programming microcontrollers
    • API
    • High performance
    • Developed for iOS
    • CSS
    • Industrial Programming
    • Development under Windows
    • Image processing
    • Compilers
    • FPGA
    • Professional literature
    • OpenStreetMap
    • Google Chrome
    • Data Mining
    • PostgreSQL
    • Development of robotics
    • Visualization of data
    • Angular
    • ReactJS
    • Search technologies
    • Debugging
    • Test mobile applications
    • Browsers
    • Designing and refactoring
    • IT Standards
    • Solidity
    • Node.JS
    • Git
    • LaTeX
    • SQL
    • Haskell
    • Unreal Engine
    • Unity3D
    • Development for the Internet of things
    • Functional Programming
    • Amazon Web Services
    • Google Cloud Platform
    • Development under AR and VR
    • Assembly systems
    • Version control systems
    • Kotlin
    • R
    • CAD/CAM
    • Customer Optimization
    • Development of communication systems
    • Microsoft Azure
    • Perfect code
    • Atlassian
    • Visual Studio
    • NoSQL
    • Yii
    • Mono и Moonlight
    • Parallel Programming
    • Asterisk
    • Yandex API
    • WordPress
    • Sports programming
    • Lua
    • Microsoft SQL Server
    • Payment systems
    • TypeScript
    • Scala
    • Google API
    • Development of data transmission systems
    • XML
    • Regular expressions
    • Development under Tizen
    • Swift
    • MySQL
    • Geoinformation services
    • Global Positioning Systems
    • Qt
    • Dart
    • Django
    • Development for Office 365
    • Erlang/OTP
    • GPGPU
    • Eclipse
    • Maps API
    • Testing games
    • Browser Extensions
    • 1C-Bitrix
    • Development under e-commerce
    • Xamarin
    • Xcode
    • Development under Windows Phone
    • Semantics
    • CMS
    • VueJS
    • GitHub
    • Open data
    • Sphinx
    • Ruby on Rails
    • Ruby
    • Symfony
    • Drupal
    • Messaging Systems
    • CTF
    • SaaS / S+S
    • SharePoint
    • jQuery
    • Puppet
    • Firefox
    • Elm
    • MODX
    • Billing systems
    • Graphical shells
    • Kodobred
    • MongoDB
    • SCADA
    • Hadoop
    • Gradle
    • Clojure
    • F#
    • CoffeeScript
    • Matlab
    • Phalcon
    • Development under Sailfish OS
    • Magento
    • Elixir/Phoenix
    • Microsoft Edge
    • Layout of letters
    • Development for OS X
    • Forth
    • Smalltalk
    • Julia
    • Laravel
    • WebGL
    • Meteor.JS
    • Firebird/Interbase
    • SQLite
    • D
    • Mesh-networks
    • I2P
    • Derby.js
    • Emacs
    • Development under Bada
    • Mercurial
    • UML Design
    • Objective C
    • Fortran
    • Cocoa
    • Cobol
    • Apache Flex
    • Action Script
    • Joomla
    • IIS
    • Twitter API
    • Vkontakte API
    • Facebook API
    • Microsoft Access
    • PDF
    • Prolog
    • GTK+
    • LabVIEW
    • Brainfuck
    • Cubrid
    • Canvas
    • Doctrine ORM
    • Google App Engine
    • Twisted
    • XSLT
    • TDD
    • Small Basic
    • Kohana
    • Development for Java ME
    • LiveStreet
    • MooTools
    • Adobe Flash
    • GreaseMonkey
    • INFOLUST
    • Groovy & Grails
    • Lisp
    • Delphi
    • Zend Framework
    • ExtJS / Sencha Library
    • Internet Explorer
    • CodeIgniter
    • Silverlight
    • Google Web Toolkit
    • CakePHP
    • Safari
    • Opera
    • Microformats
    • Ajax
    • VIM
  • Administration
    • System administration
    • IT Infrastructure
    • *nix
    • Network technologies
    • DevOps
    • Server Administration
    • Cloud computing
    • Configuring Linux
    • Wireless technologies
    • Virtualization
    • Hosting
    • Data storage
    • Decentralized networks
    • Database Administration
    • Data Warehousing
    • Communication standards
    • PowerShell
    • Backup
    • Cisco
    • Nginx
    • Antivirus protection
    • DNS
    • Server Optimization
    • Data recovery
    • Apache
    • Spam and antispam
    • Data Compression
    • SAN
    • IPv6
    • Fidonet
    • IPTV
    • Shells
    • Administering domain names
  • Design
    • Interfaces
    • Web design
    • Working with sound
    • Usability
    • Graphic design
    • Design Games
    • Mobile App Design
    • Working with 3D-graphics
    • Typography
    • Working with video
    • Work with vector graphics
    • Accessibility
    • Prototyping
    • CGI (graphics)
    • Computer Animation
    • Working with icons
  • Control
    • Careers in the IT industry
    • Project management
    • Development Management
    • Personnel Management
    • Product Management
    • Start-up development
    • Managing the community
    • Service Desk
    • GTD
    • IT Terminology
    • Agile
    • Business Models
    • Legislation and IT-business
    • Sales management
    • CRM-systems
    • Product localization
    • ECM / EDS
    • Freelance
    • Venture investments
    • ERP-systems
    • Help Desk Software
    • Media management
    • Patenting
    • E-commerce management
    • Creative Commons
  • Marketing
    • Conferences
    • Promotion of games
    • Internet Marketing
    • Search Engine Optimization
    • Web Analytics
    • Monetize Web services
    • Content marketing
    • Monetization of IT systems
    • Monetize mobile apps
    • Mobile App Analytics
    • Growth Hacking
    • Branding
    • Monetize Games
    • Display ads
    • Contextual advertising
    • Increase Conversion Rate
  • Sundry
    • Reading room
    • Educational process in IT
    • Research and forecasts in IT
    • Finance in IT
    • Hakatonas
    • IT emigration
    • Education abroad
    • Lumber room
    • I'm on my way

IoT-елочка, гори!. / Блог компании Rightech IoT Cloud / Хабр

Пришел новый русский в магазин, чтобы сдать новогоднюю гирлянду.
– Не работает? – спрашивает его продавец.
– Почему? Очень даже работает, – отвечает тот.
– А в чем тогда дело?
Покупатель вздохнул и ответил:
– Не радует.

Привет, друзья!
Очень надеемся, что гирлянда, изготовление которой мы опишем в статье, порадует вас и своим видом, и тем фактом, что вы можете ее сделать сами. Совсем не претендуя на то, что эта гирлянда станет серьезным конкурентом недорогих китайских вариантов, мы все же считаем, что такой небольшой DIY в преддверии новогоднего праздника может стать прекрасным развлечением для всей семьи, ведь тут и сборка “железочек”, и программирование, и составление сценария логики работы гирлянды, и, в конечном счете, созидание красоты, сделанной собственной руками!
Под катом:
Собираем прототип гирлянды
Пишем код для нескольких режимов работы
Подключаем к платформе Rightech IoT Cloud
Придумываем и реализовываем сценарий работы гирлянды
Создаем праздничное настроение
IoT-елочка, гори!. / Блог компании Rightech IoT Cloud / Хабр


Пишем код


Ниже представлен код для управления режимами гирлянды. Его функции:
1) установить Wi-Fi соединение и подключиться к платформе;
2) подписаться на команды — сообщения с топиками “led_on”, “led_off”, “led_attenuation”, “led_flashing” — и выполнять соответствующие действия по управлению светодиодами.
Команды “led_on” и “led_off” включают и выключают гирлянду, а команды “led_attenuation” и “led_flashing” задают режимы плавного горения и быстрого мигания с периодом, указанным в payload команды.
Обратите внимание, в коде мы используем библиотека Sheduler, которая нужна для того, чтобы одновременно запускать несколько потоков с задачами. Если этого не сделать, то при запуске бесконечного цикла горения светодиодов параллельно получать команды с платформы уже не получится.
#include "Arduino.h"
#include "Scheduler.h"
/* https://github.com/nrwiersma/ESP8266Scheduler */
#include "EspMQTTClient.h" /* https://github.com/plapointe6/EspMQTTClient */
/* https://github.com/knolleary/pubsubclient */
// Даем разумные имена для пинов, управляемых светодиодами
#define BLUE_LED_PIN 12
#define WHITE_LED_PIN 13
EspMQTTClient client(
"",
""
"dev.rightech.io",
""
);
// Задача для обработки поступающих команд
class ClientTask : public Task {
public:
void loop() {
client.loop();
}
} client_task;
// Задача для включения светодиодов
class LedOnTask : public Task {
protected:
void loop()
{
digitalWrite(WHITE_LED_PIN, HIGH);
digitalWrite(BLUE_LED_PIN, HIGH);
shouldRunValue = false; // останавливаем этот цикл сразу после включения
}
bool shouldRun()
{
return shouldRunValue;
}
public:
bool shouldRunValue = false;
} led_on_task;
// Задача для выключения светодиодов
class LedOffTask : public Task {
protected:
void loop()
{
digitalWrite(WHITE_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
shouldRunValue = false; // останавливаем этот цикл сразу после выключения
}
bool shouldRun()
{
return shouldRunValue;
}
public:
bool shouldRunValue = false;
} led_off_task;
// Задача для плавного горения светодиодов в противофазе
class LedAttenuationTask : public Task {
protected:
void loop()
{
// Вычисляем задержку на один проход цикла в зависимости от полученного в payload значения
float delayValue = period.toInt() * 1000 /*в миллисекунды*/ / 2 /*на два цикла*/ / 1024 /*на каждую итерацию в цикле*/;
for (int i = 0; i <= 1023; i++) {
analogWrite(WHITE_LED_PIN, i); // горит ярче
analogWrite(BLUE_LED_PIN, 1023 - i); // тускнеет
delay(delayValue);
}
for (int i = 1023; i >= 0; i--) {
analogWrite(WHITE_LED_PIN, i); // тускнеет
analogWrite(BLUE_LED_PIN, 1023 - i); // горит ярче
delay(delayValue);
}
}
bool shouldRun()
{
updateDelayTimer();
if (isDelayed()) return false;
if (!run_group_active) return false;
return shouldRunValue;
}
public:
bool shouldRunValue = false;
String period;
} led_attenuation_task;
// Задача для быстрого мигания светодиодов в противофазе
class LedFlashingTask : public Task {
protected:
void loop()
{
float delayValue = period.toInt() * 1000 /*в миллисекунды*/;
digitalWrite(WHITE_LED_PIN, HIGH);
digitalWrite(BLUE_LED_PIN, LOW);
delay(delayValue);
digitalWrite(WHITE_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, HIGH);
delay(delayValue);
}
bool shouldRun()
{
updateDelayTimer();
if (isDelayed()) return false;
if (!run_group_active) return false;
return shouldRunValue;
}
public:
bool shouldRunValue = false;
String period;
} led_flashing_task;
void setup() {
// Настраиваем пины в режим выхода, т.е. в режим источника напряжения
pinMode(WHITE_LED_PIN, OUTPUT);
pinMode(BLUE_LED_PIN, OUTPUT);
// Библиотека «Scheduler» позволяет при необходимости запустить несколько потоков
Scheduler.start(&led_on_task);
Scheduler.start(&led_off_task);
Scheduler.start(&led_attenuation_task);
Scheduler.start(&led_flashing_task);
Scheduler.start(&client_task);
Scheduler.begin();
}
void onConnectionEstablished() {
// Подписываемся на команды и запускаем нужный поток путем изменения переменной shouldRunValue
client.subscribe("led_on", [] (const String & payload) {
client.publish("base/state/light", "on");
led_off_task.shouldRunValue = false;
led_attenuation_task.shouldRunValue = false;
led_flashing_task.shouldRunValue = false;
led_on_task.shouldRunValue = true;
});
client.subscribe("led_off", [] (const String & payload) {
client.publish("base/state/light", "off");
led_on_task.shouldRunValue = false;
led_attenuation_task.shouldRunValue = false;
led_flashing_task.shouldRunValue = false;
led_off_task.shouldRunValue = true;
});
client.subscribe("led_attenuation", [] (const String & payload) {
client.publish("base/state/light", "attenuation " + payload + " sec");
led_on_task.shouldRunValue = false;
led_off_task.shouldRunValue = false;
led_flashing_task.shouldRunValue = false;
led_attenuation_task.period = payload;
led_attenuation_task.shouldRunValue = true;
});
client.subscribe("led_flashing", [] (const String & payload) {
client.publish("base/state/light", "flashing " + payload + " sec");
led_on_task.shouldRunValue = false;
led_off_task.shouldRunValue = false;
led_attenuation_task.shouldRunValue = false;
led_flashing_task.period = payload;
led_flashing_task.shouldRunValue = true;
});
}
void loop() {
}

[/code]

Подключаем к платформе Rightech IoT Cloud


Подключение гирлянды:


1) Создаем модель


2) Создаем объект с этой моделью


Подключение кнопки:


1) Создаем модель


2) Создаем объект с этой моделью


Подробнее о том, как подключать ZigBee устройства, можно посмотреть в видеоуроке и почитать в статье.

Разрабатываем сценарий работы


От сценария автоматизации мы хотим следующей логики:
1) один клик (single) — режим постоянного свечения и выключения;
2) два клика (double) — режим плавного свечения;
3) три клика (triple) — режим мигания;
4) после 20:00 — автоматическое выключение гирлянды (здесь также можно использовать не просто расписание, а данные еще из одного объекта — СКУДа, который собирает информацию о том, есть ли люди в офисе. Если вам интересен материал по такой теме, дайте обратную связь в комментариях ️).
Готовый автомат


Давайте вкратце разберем, что тут происходит и зачем:
Первым делом при старте автомата запускаем планировщик, который выключит гирлянду по расписанию, обезопасив нас от забывчивости. Запустили и забыли, он будет срабатывать каждый день автоматически.
В следующем состоянии не делаем ничего, просто ждем нажатия кнопки. В это состояние мы возвращаемся каждый раз после отработки определенного режима гирлянды. Из него есть переход по событию получения данных и срабатыванию планировщика.
Если получили какой-то пакет от кнопки, то переходим в состояние “Получен пакет”, из которого по таймеру и типу клика переходим в соответствующие режимы. Вы можете спросить, зачем тут таймер. А причина в том, что кнопка работает довольно “интересненько”. При нажатии три раза, она сначала присылает пакет с double, а сразу за ним — triple. Такой нюанс мы и обходим таймером, иначе срабатывало бы по неактуальному клику.
Также есть промежуточное состояние для одинарного клика. Как мы помним, вкл/выкл у нас работают по одному и тому же событию. Поэтому, если гирлянда не выключена (находится в любом из режимов активной работы), то мы ее выключаем, а если выключена, то включаем.
Запускаем автомат на наших объектах, проверяем — фуууух, работает! Время паять!


Собираем готовое устройство


Самый простой вариант пайки гирлянды — это один за другим спаивать светодиоды, предварительно надевая термоусадку. Примерно вот так:

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

термоусадку нагреваем паяльным феном

помещаем провод перед пайкой в канифоль (в таком случае не образуется тонкой оксидной пленки на поверхности провода, в результате спайка проходит легче и получается надежнее) …

… и лудим (наносим небольшой слой припоя)

проводок готов воссоединяться со светодиодом

соединяем (паяем поверхности, на которых уже есть припой)

фиксируем на веточке, сгибая ножки (необходимо предварительно оставить не менее 10 мм) светодиода

на данном этапе проводим последнее тестирование

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


Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Обратная связь
100,0%И вас с Новым годом!1
100,0%Хочу статью про управление устройствами в зависимости от количества человек в помещении1
0,0%Свои пожелания по IoT кейсам отмечу в комментариях0
Проголосовал 1 пользователь. Воздержавшихся нет.

It may be interesting

  • Comments
  • About article
  • Similar news
raymond weber 6 January 2021 15:34
There are many digital marketing companies . Many people may be skeptical and can not choose which service to use, they only know that they have to do SEO in order to make people know their brand. We have answers for you all:บริษัท รับทำ seo

raymond weber 12 January 2021 16:24
Excellent post. I was reviewing this blog continuously, and I am impressed! Extremely helpful information especially this page. Thank you and good luck. [Url = https: //buff.playnhc.com/] 먹튀 검증 사이트 [/ url]

raymond weber 19 January 2021 15:16
This is a great article thanks for sharing this informative information. I will visit your blog regularly for some latest post. I will visit your blog regularly for Some latest post.สมัคร slot เครดิตฟรี แค่ยืนยันตน

nushra45 Yesterday, 14:54
Man's lives, such as uncontrolled huge amounts, definitely not while countries furthermore reefs, challenging to seismic disturbance upward perfect apply. เมล็ด กาแฟ คั่ว

YvetteCampion84

Author

26-12-2020, 22:27

Publication Date

Development / Programming

Category
  • Comments: 4
  • Views: 1 360
Как искусственный интеллект SantaNet
Анонсируем новую версию Rightech IoT
Путь одной команды от «велосипедов» до
Многие дедлайны придумывают специально
Эпл испортила мне ноутбук почти сразу
Принимаем платежи по Системе быстрых
Write a comment
Name:*
E-Mail:


Comments
Thorough and trustworthy home inspection services for Hampton Roads. At First Glance, we inspect and treat your home as if it was our family moving in. Check out: Home Inspection Company
Yesterday, 23:05

stgenevive

Buy the best Natural Hand-Carved Human Head stone skull at soulcharms for chakra balancing, reiki energy healing, meditation, yoga, stress, anxiety depression
Yesterday, 20:22

raymond weber

Nice post! This is a very nice blog that I will definitively come back to more times this year! Thanks for informative post.Torrance Tax Accountant

Yesterday, 15:51

raymond weber

Someone Sometimes with visits your blog regularly and recommended it in my experience to read as well. The way of writing is excellent and also the content is top-notch. Thanks for that insight you provide the readers! 123movies websites 
Yesterday, 15:21

Legend SEO

Extremely intriguing online journal. A lot of web journals I see nowadays don't generally give anything that I'm keen on, however I'm most definitely inspired by this one. Recently felt that I would post and let you know.먹튀

Yesterday, 15:14

raymond weber

Adv
Website for web developers. New scripts, best ideas, programming tips. How to write a script for you here, we have a lot of information about various programming languages. You are a webmaster or a beginner programmer, it does not matter, useful articles will help to make your favorite business faster.

Login

Registration Forgot password