воскресенье, 26 августа 2018 г.

Портативная глушилка Wifi сигнала на ESP826

Данный пост был написан для ознакомления возможностей ESP8266. Помните, описанные в этом посте действия над некоторыми WiFi сетями могут быть наказуемы!. Не проводите эти действия над другими сетями.
Сразу опустим все аппаратные и программные моменты.  Технически, это устройство, которое позволяет производить "WiFi deauthentication attack".  Вы выбираете клиентов, которых вы хотите отключить от WiFi сети и начинаете атаку.

ШАГ 1
Покупаете esp8266 Nodemcu на Али.  Стоит на примерно $2.
Можете сделать это по ссылке, можете в другом магазине, если у вас ее еще нет. Я покупал по ссылке.
ШАГ 2
Я не автор этого кода. Все поздравления направляются ему.
Переходим по ссылке и скачиваем архив и распаковываем его.

ШАГ 3

Скачиваем и станавливаем Arduino IDE (у меня это весия 1.8.2)
ШАГ 4
  1. Открываем Arduino IDE
  2. Переходим Файл > Настройки
  3. Вставляем эту ссылку > http://arduino.esp8266.com/stable/package_esp8266com_index.json
  4. Далее переходим Инструменты > Плата > Менеджер плат
  5. Ищем в поиске Esp8266 и устанавливаем версию 2.0.0
  6. Затем, снова переходим в Файл > Настройки и открываем ссылку "Другие настройки можно отредактировать непосредственно в файле"
  7. Копируем это имя ( user_interface.h ) и вставляем в поиск по папке и открываем с помощью текстового редактора.
  8. Прокручиваем файл до конца и перед " #endif " вставляем эти 4 строки
     typedef void (*freedom_outside_cb_t)(uint8 status);
    int wifi_register_send_pkt_freedom_cb(freedom_outside_cb_t cb);
    void wifi_unregister_send_pkt_freedom_cb(void);
    int wifi_send_pkt_freedom(uint8 *buf, int len, bool sys_seq);
  9. Сохраняем, закрываем :D
  10. Подключаем ESP дата кабелем.
  11. Запускаем Arduino IDE, открываем код, выбираем нужную плату в менеджере и загружаем.
ШАГ 5
Подключаемся к точке по ip 192.168.4.1 (название сети - pwned, пароль - deauther) и  поочередно клацаем на Search ,Select и Attack на любую сеть в радиусе ESP8266.
Название сети и пароль по-умолчанию можно изменить в файле Settings.cpp


У меня заработала после некоторых танцев с бубном. Блочит как гаджеты так и компьютеры. Для некоторых может пригодиться использовать файлы из папки sdk_fix. Несомнено интересная игрушка, особенно в сочетании с повер банком! Ну и в заключении пару скринов от себя. Блокирует 1 устройство и сразу всех.

Управление LM317 от ШИМ сигнала

егулируемый интегральный стабилизатор напряжения LM317 компании National Semiconductor является очень популярной микросхемой, применяемой в источниках питания. LM317T позволяет изменять выходное напряжения в диапазоне от 1.25 до 37В при максимальном токе нагрузки до 1.5A. Регулировка выходного напряжения осуществляется на входе Vadj, для этого обычно применяют делитель напряжения, а для точной подстройки можно использовать потенциометр вместо постоянного резистора. См. онлайн калькулятор LM317/LM350/LM338
Однако, с развитием цифровой техники, иногда встает задача управления выходным напряжением преобразователя от микроконтроллера, либо любого другого цифрового устройства с ШИМ выходом. Представленная ниже схема позволяет заменить потенциометр или постоянные резисторы аналоговым напряжением после ШИМ сигнала. Т.е. можно осуществить real-time мониторинг выходного напряжения и точную его подстройку.

Используя операционный усилитель и простейший ФНЧ фильтр на RC-цепочке можно преобразовать ШИМ-сигнал в необходимый регулятору уровень постоянного напряжения на входе Vadj. После ФНЧ, ШИМ сигнал амплитудой 5В преобразуется в аналоговый сигнал 0-5В, а затем при помощи ОУ преобразуется до требуемого уровня. В качестве примера разберем ситуацию, когда ОУ умножает сигнал на 2. В таком случае на вывод Vadj преобразователя LM317 поступает напряжение от 0 до 10 Вольт. Следуя формуле Vout=Vadj+1.25В из даташита, получим размах выходного напряжения в диапазоне от 1.25 до 11.25 Вольт. Можно изменять коэффициент усиления ОУ при помощи резисторов R2 и R4, например при управлении от микроконтроллеров с 3.3В выходами.
В качестве ОУ можно применить известную м/с LM741, или любую другую, с подстройкой напряжения смещения входа. Номиналы RC-фильтра рассчитываются в зависимости от частоты ШИМ. В данной схеме частота ШИМ составляла 1 кГц.

Миллиомметр - приставка к мультиметру

Иногда в радиолюбительской практике возникает потребность измерения саб-омного сопротивления. И покупать готовый прибор ради пары - тройки измерений не особо улыбается. Предложенная мной схема - приставка к мультиметру, который может измерять милливольты - совершенна проста и точность показаний находится на высоком уровне. Собрана на доступных компонентах. Лично мной были проверенны и сверены с эталоном сопротивления до 0.01 ом включительно. Считаю, что сопротивления ниже этой отметки у обычного радиолюбителя если и встречаются, то крайне редко. По началу приставка задумывалась как прототип готового прибора, но потом, будучи удовлетворенный результатом - оставил как есть.
Схему вы можете увидеть выше. Lm317 включена в режиме ограничения тока. При составном резисторе на 1.2 Ома ток - 1А. Мультиметр замеряет ограничиваемое напряжение на нагрузке. Таким образом, зная ток и напряжение, можно по закону Ома вычистить сопротивление. Для тех, кто не помнит - вот формула:

R=U/I

Так как значение I нам известно - 1А, то R=U. Другими словами на экране мультиметра мы получаем уже сопротивлениев Омах.

Автоматический регулятор скорости вентилятора

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

Настройка производится до закрепления термодатчика на радиаторе. Вращая R1 добиваемся чтобы вентилятор остановился и затем вращая в обратн
ую сторону заставляем его гарантированно запускаться при зажимании терморезистора между пальцами (36 градусов) Если ваш вентилятор иногда не запускается даже при сильном нагреве (паяльник поднести) то нужно добавить цепочку С1, R2. Тогда R1 выставляем так, чтобы вентилятор гарантированно запускался при подаче напряжения на холодный блок питания, а потом, через несколько секунд после заpяда конденсатора, обороты падали, но полностью вентилятор не останавливался. Теперь закрепляем датчик и проверяем как все это будет крутится пpи реальной работе.
Rt - любой терморезистор с отрицательным ТКЕ, например, ММТ1 номиналом 10 - 30 кОм. Терморезистор крепится (приклеивается) через тонкую изолирующую прокладку (лучше слюдяную) к радиатору высоковольтных транзисторов (или к одному из них).

суббота, 25 августа 2018 г.

Счетчик подписчиков Youtube

О чем мечтает каждый автор YouTube? О том, чтобы зрители смотрели все его новые видео! Если пользователи подпишутся на ваш канал, они будут сразу узнавать о новых роликах и посещать вашу страницу снова и снова. 
Счетчик подписчиков - хорошее решение для украшения интерьера любого автора Youtube . Данный счетчик позволяет показывать до 9999 подписчиков.
Потребуется: модуль сегментного индикатора на TM1637 и esp8266 (в моем случае esp-01, нам нужны всего 2 ноги). Чтобы все это более меее цивильно выглядело, я вытравил печатную плату с предумсотренным преобразователем на 3.3 вольта от 5. Также я купил рамку в FixPrice за 25 рублей и набросал картинку в формате рамки - 10х15. Если кому понадобится.

Как это работает

Скетч опрашивает через API канал на youtube и считывает показания:
  1. Количество подписавшихся
  2. Количество загруженных видео
  3. Количество просмотренных видео
  4. Количество скрытых подписчиков

Скетч

 Скачиваем нужные библиотеки:
  1. Для работы с дисплеем
  2. YouTube API
  3. ArduinoJson
#include "SevenSegmentTM1637.h"
#include                   // installed by default  
#include             // https://github.com/witnessmenow/arduino-youtube-api
#include            // https://github.com/bblanchon/ArduinoJson


#include 
#include 
const byte PIN_CLK = 0;   // define CLK pin (any digital pin)
const byte PIN_DIO = 2;   // define DIO pin (any digital pin)
SevenSegmentTM1637    display(PIN_CLK, PIN_DIO);


//------- Replace the following! ------
char ssid[] = "Имя WiFi"; // your network SSID (name)
char password[] = "Пароль";   // your network password

// google API key
// create yours: https://support.google.com/cloud/answer/6158862?hl=en
#define API_KEY "Создайте свой по ссылке выше"

// youtube channel ID
// find yours: https://support.google.com/youtube/answer/3250431?hl=en
#define CHANNEL_ID "Создайте свой по ссылке выше"



WiFiClientSecure client;
YoutubeApi api(API_KEY, client);

unsigned long api_mtbs = 1000; //mean time between api requests
unsigned long api_lasttime;   //last time api request has been done

long subs = 0;

void setup() {

  Serial.begin(115200);
display.begin();            // initializes the display
  display.setBacklight(100);  // set the brightness to 100 %
  display.print("INIT");
  
  // Set WiFi to station mode and disconnect from an AP if it was Previously
  // connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  // Attempt to connect to Wifi network:
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  IPAddress ip = WiFi.localIP();
  Serial.println(ip);
display.clear();

}

void loop() {
  if (millis() > api_lasttime + api_mtbs)  {
    if(api.getChannelStatistics(CHANNEL_ID))
    {
      Serial.println("---------Stats---------");
      Serial.print("Subscriber Count: ");
      Serial.println(api.channelStats.subscriberCount);
      Serial.print("View Count: ");
      Serial.println(api.channelStats.viewCount);
      Serial.print("Comment Count: ");
      Serial.println(api.channelStats.commentCount);
      Serial.print("Video Count: ");
      Serial.println(api.channelStats.videoCount);
      // Probably not needed :)
      //Serial.print("hiddenSubscriberCount: ");
      //Serial.println(api.channelStats.hiddenSubscriberCount);
      Serial.println("------------------------");

  display.print(api.channelStats.subscriberCount); 
  
    }
    api_lasttime = millis();
  }

}