Разное о выращивании табака на Алтае
Вы не вошли.
Страницы 1
Итак, поначитался в сети про "Интернета вещей". Как заядлый радиолюбитель, заказал десяток разных микрокомпьютеров на Алиэкспресс. Вот они недавно приехали. Первым, мне удалось запустить/запрограммировать 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 руб). Ну в микрокомпьютере, очень просто откалибровать датчики, простыми математическими методами. Главное, добыть измерители этих параметров с высокой точностью/эталонные приборы.
На фото, модуль 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 дней кажется.
Не в сети
Вообще, конечно не нужен такой мощный микрокомпьютер для примитивных устройств(обслуживающих несколько датчиков и управляющих несколькими устройствами типа вентилятор/нагреватель). Есть аналоги предыдущего поколения, этих же устройств. Например, на чипах с одним ядром 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.
Не в сети
ESP32/HTIT-WB32LA HELTEC. Мои эксперименты.
К девавйсу привинчен цифровой градусник ds18b20. Таких градусников можно 20 шт на одну линию/порт прикрутить. Технология OneWire.
Один девайс(верхний), считывает температуру с цифрового датчика(коих может быть множество/ отображает на дисплее) и передаёт через радиопередатчик на 433 мГц на аналогичный девайс. Со штатными антеннами, на 300..400 метров данные передаются. Если нормальные/направленные антенны поставить - 5+км дальность передачи.
Не в сети
Скетч передатчика/термометра 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);
//--------------------------------------------
}
Не в сети
Скетч приёмника/терминала.
#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);
}
Не в сети
Не в сети
DS18B20 висит на нулевом порту. На ноге GPIO0(GPIO"НОЛЬ"). Даже, на плате плохо видно НОЛЬ, кварцевый резонатор закрывает.
Подтягивающий резистор, стандартный 4,7..20К. На фото его видно. Резистор соединяет +3.3В(питание) и шину данных DS18B20(GPIO0(GPIO"НОЛЬ")). Особенно плохо видно на плате, маркировку GPIO0(GPIO"НОЛЬ"), потому и такие 5 раз уточнения
Не в сети
Страницы 1