#1 23-08-2018 22:20:26

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Микрокомпьютеры ESP32/8266.

Итак, поначитался в сети про "Интернета вещей". Как заядлый радиолюбитель, заказал десяток разных микрокомпьютеров на Алиэкспресс. Вот они недавно приехали. Первым, мне удалось запустить/запрограммировать ESP32 DEVKIT V1. Это плата отладочного модуля, имеет на борту сразу модуль связывающий ПК по USB с двухъядерным процессором на борту. По сути, на одной плате программатор и микрокомпьютер + преобразователь напряжения 5В в 3,3В. Программатор нужен только один раз, чтоб прошить ПО. Единственный плюс, что питать можно девайс от 5В. Потому модуль прилично дороже, нежели голый такой микрокомп.
Брал тут. 
https://ru.aliexpress.com/item/ESP-32-E … 33ed7i0Kw2
Прошивал под Arduino IDE 1.8.5
К модулю припаял два датчика температуры/влажности DHT22/DHT11. Разброс параметров в измерении влажности, довольно велик и вообще не соответствует китайскому же градуснику за 100 руб(на то он и градусник за 100 руб). Ну в микрокомпьютере, очень просто откалибровать датчики, простыми математическими методами. Главное, добыть измерители этих параметров с высокой точностью/эталонные приборы.

DSCF2349.jpg


DSCF2350.jpg

DSCF2351.jpg

DSCF2352.jpg

DSCF2353.jpg

DSCF2354.jpg

DSCF2355.jpg

DSCF2356.jpg

DSCF2357.jpg

DSCF2358.jpg
На фото, модуль ESP32 подключенный к ПК через обычный кабель USB. На мониторе скетч/программа прошивки этого микрокомпьютера и с права в окне отображаются данные с датчиков  DHT22/DHT11. Рядом валяется аналогичный автономный китайский измеритель за 100 руб.
Я думаю, вы меня спросите - "Нафига такие сложности"? Отвечаю, планирую на этом девайсе сделать настоящий/правильный ферментатор, с измерением температуры/влажности на разных уровнях ферментационной камеры. Планирую поставить примерно 3 таких датчика и ESP32 будет управлять нагревом/влажностью/циркуляцией воздуха в камере ферментации. ESP32, позволяет отправлять данные через встроенный WIFI модуль в Интернет. И позволяет управлять собой через Интернет.
Датчики температуры/влажности брал в том же магазине.
https://ru.aliexpress.com/item/1Set-Tem … 33ed7i0Kw2
https://ru.aliexpress.com/item/DHT22-AM … 33ed7i0Kw2
Можно и подешевле это всё найти, особенно если покупаешь у китайцев от 10шт, но мне понравилась надёжность продавана 100% и реально быстро всё приехало, за 15..20 дней кажется.

Не в сети

#2 23-08-2018 23:08:49

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: Микрокомпьютеры ESP32/8266.

Вообще, конечно не нужен такой мощный микрокомпьютер для примитивных устройств(обслуживающих несколько датчиков и управляющих несколькими устройствами типа вентилятор/нагреватель). Есть аналоги предыдущего поколения, этих же устройств. Например, на чипах с одним ядром ESP8266. Такие вот платки подешевле, тоже заказал.
https://ru.aliexpress.com/item/1-Set-ES … 33ed7i0Kw2
https://ru.aliexpress.com/item/ESP8266- … 33ed7i0Kw2
https://ru.aliexpress.com/item/CH340-US … 33ed7i0Kw2
Там всё, сильно проще и дешевле. Однако, по совету бывалых юзеров таких устройств, начал изучать вопрос с самых новых разработок.
Как видно на фото, девайсы прошлого поколения, разваливаются пополам. Собственно, программатор отдельно, сам процессор на плате - есть готовое самостоятельное устройство, после прошивки на программаторе. Т.е. половину устройства(программатор через порт USB ПК, надо купить только один раз), можно потом программатором пользоваться бесконечно, подключая к нему плату самого процессора.

С лева на фото(квадратная плата), ESP8266 ESP-12F. У платы микропроцессора, на борту есть гнездо microUSB, для питания от 5В/встроен линейный преобразователь напряжения 5В/З.3В и датчик освещённости + RGB светодиод. И всё это за 200 руб! Ещё добавить к плате БП и один транзистор, управляющий нагрузкой - получим умную лампочку с детектором освещённости(которая автоматически будет включаться после заката/по расписанию или по сложному алгоритму присутствия в конкретный день и час) + управление девайсом через интернет/смартфон по WIFI.
DSCF2359.jpg

DSCF2361.jpg

DSCF2363.jpg

DSCF2364.jpg

DSCF2365.jpg

DSCF2367.jpg

DSCF2368.jpg

DSCF2369.jpg

DSCF2370.jpg

DSCF2371.jpg

Не в сети

#3 01-11-2018 03:22:00

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: Микрокомпьютеры ESP32/8266.

ESP32/HTIT-WB32LA HELTEC. Мои эксперименты.
К девавйсу привинчен цифровой градусник ds18b20. Таких градусников можно 20 шт на одну линию/порт прикрутить. Технология  OneWire.

DSCF0193.jpg

DSCF0194.jpg

DSCF0195.jpg

DSCF0196.jpg

Один девайс(верхний), считывает температуру с цифрового датчика(коих может быть множество/ отображает на дисплее) и передаёт через радиопередатчик на 433 мГц на аналогичный девайс. Со штатными антеннами, на 300..400 метров данные передаются. Если нормальные/направленные антенны поставить - 5+км дальность передачи.

Не в сети

#4 01-11-2018 03:27:21

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: Микрокомпьютеры ESP32/8266.

Скетч передатчика/термометра OneWire.
#include <LoRa.h>
#include <SPI.h>
#include <OneWire.h>//T
#include <DallasTemperature.h>//T
#include <Wire.h>  // Only needed for Arduino 1.6.5 and earlier
#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`
#include "images.h"
#define ONE_WIRE_BUS 0//T
#define SDA    4
#define SCL   15
#define RST   16 //RST must be set by software
//----------------
#define SDA     4    // GPIO4  -- SX127x's SDA
#define SCK     5    // GPIO5  -- SX127x's SCK
#define SCL     15   // GPIO15 -- SX127X's SCL
#define MISO    19   // GPIO19 -- SX127x's MISO
#define MOSI    27   // GPIO27 -- SX127x's MOSI
#define SS      18   // GPIO18 -- SX127x's CS
#define RST     14   // GPIO14 -- SX127x's RESET
#define RST_LED 16   // GPIO16 -- OLED reset pin
#define LED     25   // GPIO25 -- LED Light pin
#define DI00    26   // GPIO26 -- SX127x's IRQ(Interrupt Request)

#define BAND    433E6  //you can set band here directly,e.g. 868E6,915E6
#define PABOOST true
//-------------------
#define V2     1
#ifdef V2 //WIFI Kit series V1 not support Vext control
  #define Vext  21
#endif
//----------------------
unsigned int counter = 0;
//----------------------
//SSD1306  display(0x3c, SDA, SCL, RST);
//-----------------------
SSD1306  display(0x3c, SDA, SCL, RST_LED);
String rssi = "RSSI --";
String packSize = "--";
String packet ;
//-----------------------
#define DEMO_DURATION 3000
typedef void (*Demo)(void);
int demoMode = 0;
//int counter = 1;
int led = 27; // вывод на светодиод
OneWire oneWire(ONE_WIRE_BUS);//T
DallasTemperature sensors(&oneWire);//T
void setup() {
  pinMode(led, OUTPUT);//назначем вывод led выходом
  pinMode(Vext,OUTPUT);
  digitalWrite(Vext, LOW);    // OLED USE Vext as power supply, must turn ON Vext before OLED init
  delay(50);
Serial.begin(115200);
  Serial.println();
  Serial.println();
  display.init();
display.flipScreenVertically();
  display.setFont(ArialMT_Plain_10);
//-------------------
pinMode(Vext,OUTPUT);
  pinMode(LED,OUTPUT);
 
  digitalWrite(Vext, LOW);    // set GPIO16 low to reset OLED
  delay(50);
  display.init();
  display.flipScreenVertically(); 
  display.setFont(ArialMT_Plain_10);
//  logo();
  delay(1500);
  display.clear();
 
  SPI.begin(SCK,MISO,MOSI,SS);
  LoRa.setPins(SS,RST,DI00);
 
  if (!LoRa.begin(BAND,PABOOST))
  {
    display.drawString(0, 0, "Starting LoRa failed!");
    display.display();
    while (1);
  }
  display.drawString(0, 0, "LoRa Initial success!");
  display.display();
  delay(1000);

//----------------------
}
void drawFontFaceDemo() {
    display.setTextAlignment(TEXT_ALIGN_LEFT);
   display.setFont(ArialMT_Plain_24);
    display.drawString(0, 0, "TEMP 18B20");
}
Demo demos[] = {drawFontFaceDemo};
int demoLength = (sizeof(demos) / sizeof(Demo));
long timeSinceLastModeSwitch = 0;
void loop() {
Serial.begin(9600);//T
sensors.begin();//T
sensors.requestTemperatures();//T
Serial.println(sensors.getTempCByIndex(0)); 
//Serial.begin(115200);
display.clear();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_24);
display.drawString(0, 0,String(sensors.getTempCByIndex(0)));
display.display();
if(sensors.getTempCByIndex(0) > 30)//если датчик горячее 30 градусов, то включаем светодиод
digitalWrite(led, HIGH); // включаем светодиод
    else // иначе выключаем светодиод
    digitalWrite(led, LOW);
//digitalWrite(led, LOW);//выключаем светодиод
//Serial.begin(9600);//T
sensors.begin();//T
sensors.requestTemperatures();//T
Serial.println(sensors.getTempCByIndex(1)); 
//Serial.begin(115200);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.drawString(69, 0,String(sensors.getTempCByIndex(1)));
display.display();
//Serial.begin(9600);//T
sensors.begin();//T
sensors.requestTemperatures();//T
Serial.println(sensors.getTempCByIndex(2)); 
//Serial.begin(115200);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_24);
display.drawString(0, 40,String(sensors.getTempCByIndex(2)));
display.display();
//digitalWrite(led, HIGH); // включаем светодиод
//------------------------------------
//Serial.begin(115200);
display.clear();
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.setFont(ArialMT_Plain_10);
 
  display.drawString(0, 0, "Sending packet: ");
  display.drawString(90, 0, String(counter));
  display.display();

  // send packet
  LoRa.beginPacket();
  LoRa.print(String(sensors.getTempCByIndex(0)));
  LoRa.print(counter);
  LoRa.endPacket();

  counter++;
  digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);
  //--------------------------------------------       
}

Не в сети

#5 09-12-2018 02:20:04

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: Микрокомпьютеры ESP32/8266.

Скетч приёмника/терминала.
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h> 
#include "SSD1306.h"
#include "images.h"

// Pin definetion of WIFI LoRa 32
// HelTec AutoMation 2017 support@heltec.cn
#define SCK     5    // GPIO5  -- SX127x's SCK
#define SDA     4    // GPIO4  -- SX127x's SDA
#define SCL     15   // GPIO15 -- SX127X's SCL
#define MISO    19   // GPIO19 -- SX127x's MISO
#define MOSI    27   // GPIO27 -- SX127x's MOSI
#define SS      18   // GPIO18 -- SX127x's CS
#define RST     14   // GPIO14 -- SX127x's RESET
#define DI00    26   // GPIO26 -- SX127x's IRQ(Interrupt Request)
#define RST_LED 16   // GPIO16 -- OLED reset pin
#define LED     25   // GPIO25 -- LED Light pin
#define BAND    433E6  //you can set band here directly,e.g. 868E6,915E6
#define PABOOST true

#define V2   1

#ifdef V2 //WIFI Kit series V1 not support Vext control
  #define Vext  21
#endif

SSD1306  display(0x3c, SDA, SCL, RST_LED);
String rssi = "RSSI --";
String packSize = "--";
String packet ;

void logo(){
  display.clear();
  display.drawXbm(0,5,logo_width,logo_height,logo_bits);
  display.display();
}

void loraData(){
  display.clear();
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.setFont(ArialMT_Plain_10);
  display.drawString(55 , 0 , "RECEIVED "+ packSize + " b");
  display.setFont(ArialMT_Plain_10);
  display.drawStringMaxWidth(0 , 20 , 128, packet + "  C");
  display.drawString(0, 0, rssi); 
  display.display();
}

void cbk(int packetSize) {
  packet ="";
  packSize = String(packetSize,DEC);
  for (int i = 0; i < packetSize; i++) { packet += (char) LoRa.read(); }
  rssi = "RSSI " + String(LoRa.packetRssi(), DEC) ;
  loraData();
}

void setup() {
  pinMode(Vext,OUTPUT);
  digitalWrite(Vext, LOW);    // set GPIO16 low to reset OLED
  delay(50);
  display.init();
  display.flipScreenVertically(); 
  display.setFont(ArialMT_Plain_10);
  logo();
  delay(1500);
  display.clear();
 
  SPI.begin(SCK,MISO,MOSI,SS);
  LoRa.setPins(SS,RST,DI00);
 
  if (!LoRa.begin(BAND,PABOOST)) {
    display.drawString(0, 0, "Starting LoRa failed!");
    display.display();
    while (1);
  }
  display.drawString(0, 0, "LoRa Initial success!");
  display.drawString(0, 10, "Wait for incoming data...");
  display.display();
  delay(1000);
  //LoRa.onReceive(cbk);
  LoRa.receive();
}

void loop() {
  int packetSize = LoRa.parsePacket();
  if (packetSize) { cbk(packetSize);  }
  delay(10);
}

Не в сети

#6 09-12-2018 02:21:32

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: Микрокомпьютеры ESP32/8266.

Примерно так, эти две программы работают в реальном мире.
DSCF0174.jpg

Не в сети

#7 09-12-2018 03:12:36

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: Микрокомпьютеры ESP32/8266.

DS18B20 висит на нулевом порту. На ноге GPIO0(GPIO"НОЛЬ"). Даже, на плате плохо видно НОЛЬ, кварцевый резонатор закрывает.


DSCF0203.jpg

DSCF0202.jpg

DSCF0198.jpg

DSCF0192.jpg
Подтягивающий резистор, стандартный 4,7..20К. На фото его видно. Резистор соединяет +3.3В(питание) и шину данных DS18B20(GPIO0(GPIO"НОЛЬ")). Особенно плохо видно на плате, маркировку GPIO0(GPIO"НОЛЬ"), потому и такие 5 раз уточнения smile

Не в сети

Подвал раздела

Работает на FluxBB (перевод Laravel.ru)