Отправка данных показания датчика DHT11 из Arduino в ESP8266

LoveDream
Offline
Зарегистрирован: 25.01.2018

Привет всем!

Подскажите пожалуйста пример.

К arduino mega подключён датчик влажности и температуры DHT11. Как отправить показания этого датчика в ESP8266 с дальнейшим отображением в WEB сервере ума не приложу.....

На ESP8266 при стандартной АТ прошивке работает. Но мне так не подходит. Т.к. веб страница с оверДОХРЕНА показаний датчиков, концевиков и кнопок много занимает места, и в мегу не вмещается.

Поэтому хочу использовать ресурсы ESP8266 и настраивать её в Arduino IDE.

Т.е. мега работает с датчиками, концевиками, и реле. Еспеха это всё отображает и отправляет команды меге например включить тёплый пол.

ESP8266 получилось настроить отправив команду для меги например: включить реле тёплого пола.

А вот передать показания датчика температуры из меги в есп у меня траблы.....

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Вот как отправляете команду "включить реле теплого пола" точно так же отправляете обратно показания датчика.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

LoveDream пишет:

в мегу не вмещается.

Ахренеть!

LoveDream
Offline
Зарегистрирован: 25.01.2018

void serialEvent3() {
  while (Serial3.available()) {
    // Чтение данных из порта Serial3
    char inChar = Serial3.read();
    // Вывод прочитанных данных в порт Serial
    Serial.write(inChar);
    // Поиск команды в полученных данных (команда должна быть в квадратных скобках)
    inString += inChar;
    if (inChar == ']') {
      if (inString.indexOf("[ON]")>0) 
      {digitalWrite(teplpol, HIGH); }
      else if (inString.indexOf("[OFF]")>0)
      {digitalWrite(teplpol, LOW);}

Это в меге

webPage += "<p>Тёплый пол <a href=\"teplpolON\"><button>ON</button></a>&nbsp;<a href=\"teplpolOFF\"><button>OFF</button></a></p>";

  // подключение к WiFi
  WiFi.begin(ssid, password);
  Serial.println("");
     
  // ожидание соединения:
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");  //  "Подключились к "
  Serial.println(ssid);
  Serial.print("IP address: ");  //  "IP-адрес: "
  Serial.println(WiFi.localIP());

  //  Проверка запуска MDNS
  if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  }
     
  server.on("/", [](){
    server.send(200, "text/html", webPage);
  });
  
  server.on("/teplpolON", [](){
    server.send(200, "text/html", webPage);
    Serial.println("[ON]");
    delay(1000);
  });
  
  server.on("/teplpolOFF", [](){
    server.send(200, "text/html", webPage);
    Serial.println("[OFF]");
    delay(1000);
  });

Это в ESP8266

LoveDream
Offline
Зарегистрирован: 25.01.2018

Грёбаный рободин :((

Действительно, что выкинуть на помойку и использовать эзернет  :(

b707
Offline
Зарегистрирован: 26.05.2017

и что тут в мегу не вмещается?

 

Насчет "выкинуть на помойку" - сдается мне, что "дело не в бобине" :)

LoveDream
Offline
Зарегистрирован: 25.01.2018

Управление светом. Полив растений. Управление Тёплым полом. Управление увлажнителем. Управление жалюзи......... Дальше продолжать?

Я привёл пример как управлять реле. А мне нужно показания датчиков из меги в есп передать, и хз как.

b707
Offline
Зарегистрирован: 26.05.2017

LoveDream пишет:

Управление светом. Полив растений. Управление Тёплым полом. Управление увлажнителем. Управление жалюзи......... Дальше продолжать?

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

 

Так что этот список - ни о чем. Может он и в Нану вошел бы, а может его просто надо разложить по пяти отдельным МК.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

LoveDream пишет:
А мне нужно показания датчиков из меги в есп передать, и хз как.

Serial3.write()

LoveDream
Offline
Зарегистрирован: 25.01.2018

Вы меня не поняли.

Не хватает памяти у меги когда есп прошита в стандартную AT прошивку. Т.к. помимо обработки алгоритма работы ещё и HTML страница сжирают всю память меги, когда у есп отведено 8 мегабайт (хоть опой жуй), а на стандартной прошивке, есть подозрения, что память эта в простое, вот и пытаюсь её использовать. 

И щас пытаюсь есп саму программировать в среде Arduino IDE. И не хватает знаний и понятий, как передать значение датчика температуры из Arduino mega в ESP8266.

 

LoveDream
Offline
Зарегистрирован: 25.01.2018

а есп будет читать данные как Serial.available(). ???

Не понимаю.  мега порт 3, есп порт только 1. Монитор порта с компьютера тоже порт 1. 

Жесть какая-то...

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

У меги 4ре аппаратных сериала. Судя по вашим кускам кода сериал3 меги соединен с сериал есп. С меги шлете с сериала3 в есп принимаете на сериале.

kalapanga
Offline
Зарегистрирован: 23.10.2016

LoveDream пишет:

а есп будет читать данные как Serial.available(). ???

Не понимаю.  мега порт 3, есп порт только 1. Монитор порта с компьютера тоже порт 1. 

Жесть какая-то...

В чём жесть-то? У Вашей ESP есть последовательный порт. Его можно подключить к компу, можно к меге. Но, разумеется, не одновременно.

Я правильно понимаю, что у Вас девайс - ардуино мега и esp "в одном флаконе"?

LoveDream
Offline
Зарегистрирован: 25.01.2018

Совершенно верно.....

В общем, не выходит каменный цветок. Не обновляет свои переменные esp :(

webPage += "<p>" + String(temp) + "</p>";

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

LoveDream пишет:

в мегу не вмещается.

.......

Управление светом. Полив растений. Управление Тёплым полом. Управление увлажнителем. Управление жалюзи......... Дальше продолжать?

Давайте я продолжу ...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не, ну если у Вас там не web страница, а целый порносайт, то тогда, конечно :)

LoveDream
Offline
Зарегистрирован: 25.01.2018

Всё верно!
При добавлении очередной кнопки, веб сервер перестаёт отвечать.

Поэтому я наигрался с АТ командами. И хочу прошить в Arduino IDE эту бедную ESP8266 

kalapanga
Offline
Зарегистрирован: 23.10.2016

LoveDream пишет:

В общем, не выходит каменный цветок. Не обновляет свои переменные esp :(

webPage += "<p>" + String(temp) + "</p>";

Так а Вы для этого что-нибудь написали? Вот совсем свежая тема про обмен данными между двумя ардуинами: Проблема передачи по серийному порту между двумя ардуино Почитайте, вдруг поможет...

b707
Offline
Зарегистрирован: 26.05.2017

LoveDream пишет:

При добавлении очередной кнопки, веб сервер перестаёт отвечать.

Поэтому я наигрался с АТ командами. И хочу прошить в Arduino IDE эту бедную ESP8266 

да с чего вы взяли. что вам это поможет? Если при добавлении очередной кнопки сервер перестает отвечать - надо долбить сервер, AT-прошивка-то чем виновата?

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

 

LoveDream
Offline
Зарегистрирован: 25.01.2018

Ой я вас умоляю. Эту АТ прошивку юзаю от безысходности. Достаточно несколько раз нажать клавишу f5 и всё, веб сервер завис. Только перезагрузка её спасает. Я делаю вывод, что плата не исправна.

kalapanga
Offline
Зарегистрирован: 23.10.2016

На Гиктаймсе про этот девайс статья была. Обзор и пример сервера. Посмотрите, может оттуда что подчерпнёте.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

LoveDream пишет:

Достаточно несколько раз нажать клавишу f5 и всё, веб сервер завис. Только перезагрузка её спасает. Я делаю вывод, что плата не исправна.

С чего делается такой вывод? Почем не "код кривой"?

LoveDream
Offline
Зарегистрирован: 25.01.2018

Да простейший веб сервер с включением светодиода. клавишу f5 f5 f5. И всё, веб сервер упал.... АТ прошивка видимо кривая. И ниче с ней не сделаешь.....

Поэтому пытаюсь перейти в среду arduino ide. Данных багов и зависаний тут не наблюдается, а тут грабли такие в виде труднопонятного кода общения по serial.
Учитывая, что нигде нет ни одного рабочего примера подключённых датчиков к меге уно или нано и выводом их на есп, видимо буду первопроходцем. 
А если задать вопрос: "ребят, подключён датчик температуры ds18b20 к arduino mega. Как передать показания на esp8266 в веб сервер". Начинают кукарекать, зачем тебе мега, сделай всё на есп..... в общем как обычно, объясняют пол дня какой я идиот)

P.s. я не программист. Простите.

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Я джва года этого ждал! Наконец-то кто-то разберется с этим чертовым веб-сервером на ESP!

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

И что труднопонятного в Serial.write и Serial.read? Serial3.write и Serial3.read? Ссылку на тему давали выше. Обыснаясвязь сеииал с сериал, ничего ноаого тут нет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

Я джва года этого ждал! Наконец-то кто-то разберется с этим чертовым веб-сервером на ESP!

Щас набигут разбиратели!

b707
Offline
Зарегистрирован: 26.05.2017

LoveDream пишет:
нигде нет ни одного рабочего примера подключённых датчиков к меге уно или нано и выводом их на есп, видимо буду первопроходцем.

P.s. я не программист.

 
А вам надо обязательно В ОДНОМ ПРИМЕРЕ подключение вашего датчика и вывод его в ЕСП? :) А комбинировать из частей вы не умеете? - Есть примеры подключения датчиков к Меге (весь Гугль забит). Немало и примеров связи Меги и ЕСП.  Вам остается только их обьединить.
 
Вам придется стать программистом. Начинайте учится. Сведения о том, что с ардуиной можно обращаться, не умея программировать - вранье.

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

посмотрите библиотеку EasyTransfer вроде как облегчает делать обмен по сериал

LoveDream
Offline
Зарегистрирован: 25.01.2018

Penni пишет:
У меги 4ре аппаратных сериала. Судя по вашим кускам кода сериал3 меги соединен с сериал есп. С меги шлете с сериала3 в есп принимаете на сериале.

Огромное спасибо ДРУЖИЩЕ!
зная эту информацию, создал в flprog и посмотрел на обмен. И ура!!!!
ESP8266 теперь работает полноценно, без китайской прошивки. С 8 мгб памтью на борту (хоть порно сайт на ней пиши).
УРААААААА грёбаный wemos побеждён!
Всем спасибо!!!!!!
Можно удалять свой профиль тут, чтоб не террорезировать народ.

b707
Offline
Зарегистрирован: 26.05.2017

LoveDream пишет:

Penni пишет:
У меги 4ре аппаратных сериала. Судя по вашим кускам кода сериал3 меги соединен с сериал есп. С меги шлете с сериала3 в есп принимаете на сериале.

Огромное спасибо ДРУЖИЩЕ!
зная эту информацию, создал в flprog и посмотрел на обмен. И ура!!!!
ESP8266 теперь работает

который раз поражаюсь, на какой ерунде можно встать в тупик...

Вс-таки я не педагог - я не в состоянии поставить себя на место новичка... хотя сам таким же был. наверно.

LoveDream - тем не менее учите программирование, на кривых костылях flprog далеко не уйти

OFY
Offline
Зарегистрирован: 30.10.2019

Господа, ай нид ю хелп ) Сломал голову

У меня nrfnrf24l01 подключена к Меге (получает данные по каналу). Далее необходимо эти данные отправить с Меги на ESP8266 ESP-01, которая в свою очередь отправит данные на брокер (с брокером все ок, данные отправляются. в примерах скетча этой части не будет)

Не могу получить данные на ESP8266 по Serial. Перепробовал уже много вариантов. Ниже крайняя не рабочая версия...

Подскажите, что не так? Подправьте код плз :)

Мега (тут все вроде норм работает)

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include<SoftwareSerial.h>

SoftwareSerial myData(10, 11);  //RX, TX

const uint64_t pipe = 0xF0F1F2F3F4LL; // Код трубы
RF24 radio(9, 53);                    // Пины к которым подключены CE, CSN nRF24
 
void setup(){
  Serial.begin(9600); // Скорость передачи данных аппаратного UART порта
  myData.begin(9600);
  radio.begin();  
  delay(1000);
  radio.setChannel(9); // канал (0-127)
  radio.setDataRate(RF24_1MBPS);     
  radio.setPALevel(RF24_PA_HIGH);   
  radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
  radio.startListening(); // включаем приемник, начинаем слушать трубу
}

void loop()   
{  
    int data[2]={1,2};
    if (radio.available()) // проверяем не пришло ли чего в буфер.
    { 
    radio.read(data, 4); // читаем данные, указываем сколько байт читать
    Serial.print ("Humidity: ");
    Serial.print (data[0]);
    Serial.print ("%\t");
    Serial.print ("Temperature: ");
    Serial.print(data[1]);
    Serial.println (" *C");
    myData.write(reinterpret_cast<uint8_t *>(data), sizeof(data));
    myData.readBytes(reinterpret_cast<uint8_t *>(data), sizeof(data));
        for (int i = 0; i < sizeof(data) / sizeof(data[0]); i++) 
        {
        Serial.print("data[");
        Serial.print(i);
        Serial.print("] = ");
        Serial.println(data[i]);
        }
      Serial.println();
    delay(1000);
    }
}

ESP8266

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <stdlib.h>
#include<SoftwareSerial.h>

SoftwareSerial myData (5, 3);  //RX, TX

const char *ssid =  "XXX";                                  // SSID Wi-Fi
const char *pass =  "XXX";                             // Пароль Wi-Fi
const char *mqtt_server = "192.168.1.1";                    // IP адрус сервера mqtt
const int mqtt_port = 1883;                                 // Порт сервера mqtt
const char *mqtt_user = "XXX";                              // Имя пользователя сервера mqtt
const char *mqtt_pass = "XXX";                         // пароль пользователя сервера mqtt
const char *mqtt_client_name = "XXX";                 // Имя клиента сервера mqtt

#define BUFFER_SIZE 100

unsigned long previousMillis = 0;
const long interval = 10000;

WiFiClient wclient;                                         //Declares a WifiClient Object using ESP8266WiFi
PubSubClient client(wclient, mqtt_server,  mqtt_port);      //instanciates client object
//Function is called when, a message is recieved in the MQTT server.
void setup() {
  // Setup console
  Serial.begin(9600);  //set the baud rate
  myData.begin(9600);
 pinMode(5,INPUT);
 pinMode(3,OUTPUT);
  delay(10);
  Serial.println();
  Serial.println();
}
void loop() {
  if (WiFi.status() != WL_CONNECTED) {  //wifi not connected?
    Serial.print("Connecting to ");
    Serial.print(ssid);
    Serial.println("...");
    WiFi.begin(ssid, pass);
    if (WiFi.waitForConnectResult() != WL_CONNECTED)
      return;
    Serial.println("WiFi connected");
  }
  if (WiFi.status() == WL_CONNECTED) {
    //client object makes connection to server
    if (!client.connected()) {
      Serial.println("Connecting to MQTT server");
      //Authenticating the client object
      if (client.connect(MQTT::Connect("mqtt_client_name")
                         .set_auth(mqtt_user, mqtt_pass))) {
        Serial.println("Connected to MQTT server");
        //Subscribe code
        client.subscribe("Temparture-sensor");
      } else {
        Serial.println("Could not connect to MQTT server");
      }
    }
    if (client.connected())
      client.loop();
  }
  SendTempHumid();  // this will send the dummy temparature reading
}
// Non-Blocking delay
void SendTempHumid()
{
  int data[2] = {1,2};
//  if (myData.available () >=sizeof(data))
  {
    myData.readBytes(reinterpret_cast<uint8_t *>(data), sizeof(data));
    for (int i = 0; i < sizeof(data) / sizeof(data[0]); i++)
    {
      Serial.print("data[");
      Serial.print(i);
      Serial.print("] = ");
      Serial.println(data[i]);
    }
    Serial.println();
    delay(1000);
  }
}

В мониторе порта ESP полученных NRF данных не вижу :(

 

На ESP RX TX пробовал и 2, 7 и 3, 5 безрезультатно. Подключение через конвектор логических уровней или делитель на резисторах не помогла, значит что-то с кодом не то :(

b707
Offline
Зарегистрирован: 26.05.2017

вы читаете из Сериал. даже не проверяя. есть ли там что-то. Ну и вообще в коде напихано куча лишнего.

OFY
Offline
Зарегистрирован: 30.10.2019

Лишнее уберу. По поводу проверки.

Проверку на ESP пока убрал, что бы монитор показывал все, что есть... Потом добавлю.

У Мега в сериале есть данные. Они выводятся, тут все ок. Или я в чем-то не прав? :)

Не получается отправить их на ESP (или считать их).

Может поможете кусочком кода для ESP? :)

b707
Offline
Зарегистрирован: 26.05.2017

OFY пишет:

Может поможете кусочком кода для ESP? :)

нет никакого специального "кода для ЕСП", сериал что на Меге, что на ЕСП работает одинаково. Могу вам выложить свою библиотеку для передачи двоичных данных по Сериал. надо?

OFY
Offline
Зарегистрирован: 30.10.2019

Да, буду благодарен!

b707
Offline
Зарегистрирован: 26.05.2017

Хорошо, ближе к вечеру

b707
Offline
Зарегистрирован: 26.05.2017

два файла, пложить в директорию скетча

UARTTransfer.h

#pragma once
//Not necessary, but just in case.
#if ARDUINO > 22
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include "Stream.h"

#define UT_BUFFER_SIZE 32
#define UT_MIN_MESS_SIZE 3
#define UT_HEADER1 0xb7
#define UT_HEADER2 0x07
#define UT_HEADER3 0x33

class UARTTransfer
{
public:
	UARTTransfer();
	~UARTTransfer();
	void begin(Stream *theStream);
	void sendData(uint8_t send_id, uint8_t size, uint8_t* data);
	bool receiveData();
	uint8_t getMessageID() { return mess_id;};
	uint8_t getDataLength() { return mess_data_size; };
	uint8_t getData(uint8_t* dest, uint8_t size);
	void clearMessage();
	Stream *_stream;
	
private:
	uint8_t rx_buf[UT_BUFFER_SIZE];
	uint8_t buf_ind = 0;
	uint16_t rx_time;
	uint16_t rx_timeout = 500;
	uint8_t  rx_stage =0;
	uint8_t head[3] = { UT_HEADER1 , UT_HEADER2, UT_HEADER3 };
	uint8_t mess_id, mess_data_size;


};

UARTTransfer.cpp

#include "UARTTransfer.h"

UARTTransfer::UARTTransfer()
{
}
UARTTransfer::~UARTTransfer()
{
}

void UARTTransfer::begin(Stream *theStream) {
	_stream = theStream;

}

boolean UARTTransfer::receiveData() {
	uint8_t mess_len = 0;
	uint8_t in_char;

	if (rx_stage > 5) return false;
	if ((rx_stage) && ((millis() - rx_time) > rx_timeout)) {
		clearMessage();
		
	}
	if (!(_stream->available())) return false;
	else mess_len = _stream->available();

	while (mess_len) {
		in_char = _stream->read();
		mess_len--;
		if (rx_stage == 0) {
			
			while ((in_char != head[rx_stage]) && (mess_len)) {
				in_char = _stream->read();
				mess_len--;
			}
			if (in_char != head[rx_stage]) return false;
			rx_stage++;
			rx_time = millis();
			

		}
		else if (rx_stage < 3) {
			
			if (in_char != head[rx_stage]) {
				clearMessage();
				
			}
			else rx_stage++;
			
		}
		else {
			
			if (rx_stage == 3) {
				mess_id = in_char;
				rx_stage++;

			}
			else if (rx_stage == 4) {
				mess_data_size = in_char;
				if (mess_data_size < UT_MIN_MESS_SIZE) {
					clearMessage();
					
				}
				else rx_stage++;

			}
			else if (rx_stage == 5) {

				rx_buf[buf_ind++] = in_char;
				if (buf_ind == mess_data_size) {
					mess_data_size--;
					uint8_t calc_CS = mess_data_size;
					for (uint8_t i = 0; i < mess_data_size; i++) {
						calc_CS ^= rx_buf[i];
					}
					if (calc_CS == rx_buf[mess_data_size]) { //CS good
						rx_stage++;
						return true;
					}
					clearMessage();
				}

			}
			
		}
	}
	return false;
}

void UARTTransfer::sendData(uint8_t send_id, uint8_t size, uint8_t* data) {
	uint8_t CS = size;
	for (uint8_t i = 0; i < 3; i++) {
		_stream->write(head[i]);
	}
	_stream->write(send_id);
	_stream->write(size + 1);
	for (uint8_t i = 0; i < size; i++) {
		CS ^= *(data + i);
		_stream->write(*(data + i));
	}
	_stream->write(CS);
}

uint8_t UARTTransfer::getData(uint8_t* dest, uint8_t size) {
	memcpy(dest, rx_buf, size);
	return size;
}
void UARTTransfer::clearMessage() {
	rx_stage = 0;
	mess_id = 0;
	mess_data_size = 0;
	buf_ind = 0;
}


 

b707
Offline
Зарегистрирован: 26.05.2017

Пример использования

#include "UARTTransfer.h"

UARTTransfer UT;

// идентификатор канала, 1 байт, должен быть одинаков на приемнике и передатчике
#define UT_CHANNEL 0x45

void setup(void)
{ 
  Serial.begin(9600);
  UT.begin(&Serial);
 
 }

void loop() {
  uint16_t data[2];
// получение данных
  if (UT.receiveData()) {
    uint8_t m_id = UT.getMessageID();
    if ((m_id == UT_CHANNEL) && (UT.getDataLength() ==  sizeof(data) )) {
      UT.getData((uint8_t*)data, sizeof(data));
      
    }
    UT.clearMessage();
  }
  // отправка
  UT.sendData(UT_CHANNEL, sizeof(data), (uint8_t*) data);
   
  delay(1000);
}


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

OFY
Offline
Зарегистрирован: 30.10.2019

 b707 Спасибо тебе огромное!

b707
Offline
Зарегистрирован: 26.05.2017

OFY пишет:

 b707 Спасибо тебе огромное!

так работает или нет?

OFY
Offline
Зарегистрирован: 30.10.2019

Пробую...

Мега залилась, затык в ESP

Сейчас ESP ругается на boolean в файле UARTTransfer.cpp

---

UARTTransfer.cpp:11:10: error: prototype for 'boolean UARTTransfer::receiveData()' does not match any in class 'UARTTransfer'

  boolean UARTTransfer::receiveData() {

          ^

In file included from sketch\UARTTransfer.cpp:1:0:

UARTTransfer.h:21:10: error: candidate is: bool UARTTransfer::receiveData()

     bool receiveData();

---

Если заменить на bool UARTTransfer::receiveData() то заливает, но результат ноль

OFY
Offline
Зарегистрирован: 30.10.2019

Проверил на связке двух ардуин (отправка с Меги на Нано) все работает. Продолжаем мучать ESP )) Пороюсь в закромах, может другую серию ESP найду

b707
Offline
Зарегистрирован: 26.05.2017

OFY пишет:

Проверил на связке двух ардуин (отправка с Меги на Нано) все работает. Продолжаем мучать ESP )) Пороюсь в закромах, может другую серию ESP найду

У меня этот код работает именно на ЕСП. Ошибки с bool - boolean нет

И еще имейте в виду, что одни и те же модели ЕСП бывают с разным кварцем, например ЕСП-01 бывает с кварцем на 26 и на 40 МГц. Если в настройках поставить неправильную частоту - практически все будет работать, кроме Сериал. Проверьте, просто в Монитор порта ваша Есп что-нибудь выводит?

OFY
Offline
Зарегистрирован: 30.10.2019

Сама ESP работает, но вот с получением по сериал что-то глухо..... Сейчас 40МГц, 26 нет в меню... ХЗ... И как на зло осталось только две ESP-01...

b707
Offline
Зарегистрирован: 26.05.2017

OFY пишет:

Сама ESP работает, но вот с получением по сериал что-то глухо..... Сейчас 40МГц, 26 нет в меню...

В чем выражается. что "сама ЕСП работает" ? Если просто подключить ЕСП к USB и вывести в сериал что-то типа "Hello world" - в Мониторе порта это видно?

И то. что в меню нет 26 Мгц - это очень странно, должно быть.

 

b707
Offline
Зарегистрирован: 26.05.2017

по поводу кварца

На этой картинке кварц - небольшой серый прямоугольник под словом "Cloud". В лупу на нем можно прочитать цифры 26 или 40. Посмотрите на своей плате - если там 26, а в настройках 40 - сериал работать не будет

OFY
Offline
Зарегистрирован: 30.10.2019

"Если просто подключить ЕСП к USB и вывести в сериал что-то типа "Hello world" - в Мониторе порта это видно?"

Да, работает.

"Посмотрите на своей плате - если там 26, а в настройках 40 - сериал работать не будет"

Таки 26

"И то. что в меню нет 26 Мгц - это очень странно, должно быть.

Спасибо! Обновил библиотеку появилось 26... Но пока не помогло )))) Отрыл таки ESP-07 результат тот же.

Я явно что-то делаю не так ... Надо сделать перерыв на сегодня...

OFY
Offline
Зарегистрирован: 30.10.2019

b707 пока безрезультатно... и частоту менял ... и так... и эдак... Видимо где-то что-то я не то делаю, но не могу понять.

Вопрос (что не так с ESP в ниже приведенном варианте?)!

Мега (данные получаю и они уходят через 11 пин, тут все гуд)

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include<SoftwareSerial.h>

SoftwareSerial myData(10, 11);  //RX, TX

const uint64_t pipe = 0xF0F1F2F3F4LL; // Код трубы
RF24 radio(9, 53);                    // Пины к которым подключены CE, CSN nRF24
 
void setup(){
  Serial.begin(9600); // Скорость передачи данных аппаратного UART порта
  myData.begin(9600);
  radio.begin();  
  delay(1000);
  radio.setChannel(9); // канал (0-127)
  radio.setDataRate(RF24_1MBPS);     
  radio.setPALevel(RF24_PA_HIGH);   
  radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
  radio.startListening(); // включаем приемник, начинаем слушать трубу
}

void loop()
{    
    int data[2]={1,2};
    if (radio.available()) // проверяем не пришло ли чего в буфер.
    { 
    radio.read(data, 4); // читаем данные, указываем сколько байт читать
    myData.write(reinterpret_cast<uint8_t *>(data), sizeof(data));
    myData.readBytes(reinterpret_cast<uint8_t *>(data), sizeof(data));
        for (int i = 0; i < sizeof(data) / sizeof(data[0]); i++) 
        {
        Serial.print("data[");
        Serial.print(i);
        Serial.print("] = ");
        Serial.println(data[i]);
        }
      Serial.println();
    delay(1000);
    }
}

Нано

#include <PubSubClient.h>
#include <stdlib.h>
#include<SoftwareSerial.h>

SoftwareSerial myData (9, 10);  //RX, TX

void setup() {
  // Setup console
  Serial.begin(9600);  
  myData.begin(9600);
  delay(10);
  Serial.println();
}
void loop()
{
  int data[2] = {1,2};
  {
    myData.readBytes(reinterpret_cast<uint8_t *>(data), sizeof(data));
    for (int i = 0; i < sizeof(data) / sizeof(data[0]); i++)
    {
      Serial.print("data[");
      Serial.print(i);
      Serial.print("] = ");
      Serial.println(data[i]);
    }
    Serial.println();
    delay(1000);
  }
}

Все работает и на Нано (Pin 9) данные получены.

А вот если то же засунуть в ESP

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include<SoftwareSerial.h>
#include <stdlib.h>

SoftwareSerial myData(3, 5);  //RX, TX

void setup() 
{
  Serial.begin(9600);
  myData.begin(9600);
  delay(10);
  Serial.println();
}

void loop()
{    
    int data[2]={1,2};
    myData.readBytes(reinterpret_cast<uint8_t *>(data), sizeof(data));
        for (int i = 0; i < sizeof(data) / sizeof(data[0]); i++) 
        {
        Serial.print("data[");
        Serial.print(i);
        Serial.print("] = ");
        Serial.println(data[i]);
        }
      Serial.println();
    delay(1000);
}

данных нет :(

anarch
Offline
Зарегистрирован: 10.09.2017

RX,TX местами не перепутали? 

OFY
Offline
Зарегистрирован: 30.10.2019

Нет, не перепутал. Для чистоты эксперимента менял местами. И пины менял.

anarch
Offline
Зарегистрирован: 10.09.2017

Либо библа не рабочая, либо с пинами, что-то не то.