Ir ao conteúdo

WMAC

Membro Pleno
  • Posts

    34
  • Cadastrado em

  • Última visita

posts postados por WMAC

  1. Olá, glra...gente, alguém sabe como faço pra receber uma string com valores de vários sensores e desmontá-la a partir de caracteres delimitadores?

     

    Por exemplo estou enviando pela Serial do Arduino ao Esp01 a seguinte string:

     "#34;54;67;99*"

    Onde # delimita inicio, ; separa os valores e * indica o fim da string...preciso receber os valores sempre numa mesma ordem.

    Se alguém puder ajudar agradeço..

    • Obrigado 1
  2. Olá, gente.. estou precisando de ajuda... estou tentando realizar o envio de strings de um arduino mega para um esp01 8266 através da serial.

     

    O código pra receber que implementei no esp é:

     

     

    if (Serial.available()) {
        String rx;
        String strArr2[4];
        delay(10);
        while(Serial.available()){
          //char *a = 12;12.6;78;87;;
         char a = Serial.read(); 
        rx += a;
           }
     

    No entanto, embora as strings estejam sendo enviadas para o esp ele não entra no if Serial.available... O hardware que estou usando é um adaptador pra esp01/usb ´para programar direto na IDE e depurar em seguida conecto ao arduino mega para a comunicação pela Serial2 do mega.  O vejo pelo monitor da IDE é que os dados estão sim sendo enviados pelo Arduino ao Esp mas não compreendo o porque não entra no if para receber e processar as strings. Se alguém puder me ajudar agradeço muito.

    image.png.667f8ac19f81da945d39c3a4ad3a8547.png

  3. @darkstrikerd  obrigada por responder.

    Tentei de duas formas:

    1- Utilizando os commandos AT ele até conecta com o servidor do PBI e até mesmo indica que o json foi enviado mas na plataforma não chega nenhum dado;

    2 - Usei a library WiFi esp para fazer a requisição HTTP POST, usando a porta 443 (HTTPS). Aqui ele consegue se conectar ao power BI, mas recebo os erros "TIMEOUT" e

    Data packet send error (2)
    Failed to write to socket 3

     

    Eu consegui enviar json pro PBI usando um NodeMCu, as bibliotecas disponíveis para ele consideram o certificado SHA-1, diferente das bibliotecas que encontrei para o esp01. Preciso utilizar o arduino+esp01 como hardware.

  4. Olá, glra...Precisando de ajuda 😁

     

    Estou tentando enviar dados no formato json do arduino +esp01 para um conjunto de dados POWER BI através de requisição POST http mas não estou conseguindo. Estou utilizando os comandos AT, o esp conecta à rede wifi mas ocorre falha de conexão ao acessar a URLpush (url+API) que o power bi disponibiliza na versão online quando se cria um conjunto de dados.

     

     

  5. @Matheus Maldi e @Flávio Pedroza obrigada por responderem. Tentei da forma como vocês sugeriram e não deu certo. Fiz um outro teste obtendo a leitura de registradores com um SCADA e vi que obtenho valor correto lendo a variável como inteiro trocado de 4 bytes sem sinal, que teoricamente é a forma como vocês estão sugerindo, certo? Mas o valor que obtenho ao tentar com o Arduino não corresponde ao esperado...

  6. @Davi Silva Santos  Obrigada por responder! Mas acho que não expliquei direito...estou realizando a comunicação Modbus entre o arduino e um inversor solar..na memória do inversor um determinado valor que quero ler ocupa 2 registradores (32bits) de 16 bits cada (registradores de holding) . A variável é do tipo inteiro, só que,segundo o manual, a ordem das palavras é Lo-Hi. Eu queria saber como faço pra obter  o valor inteiro..

  7. @aphawk  obrigada pelas dicas! Realmente deveria ser simples mesmo, até porque eu testei com Modbus Slave e deu tudo certo...inclusive eu retirei o resistor de terminação do módulo para ver se funcionava uma vez, teoricamente, redes de curta distância não precisam dele. Não funcionou...

     

    O módulo está bom e funciona mas não com o inversor (como eu disse testei o circuito e o código usando o Modbus Slave)

     

    Felizmente, testei a comunicação apenas com o CI MAX485 (nem os resistores de polarização e terminação) e usando a biblioteca ModbusMaster e funcionou perfeitamente (até que enfim....rs). Eu deveria ter feito isso bem antes mas como tudo funcionava com o simulador ficou difícil encontrar o erro..

     

    Quero agradecer a todos que deram um pouco de seu tempo pra me ajudar aqui no fórum. Obrigada!

    • Curtir 2
  8. @aphawk  pela minha pesquisa, acredito que o problema tenha relação com polarização e/ou terminação de linha que o inversor pode possuir/precisar. Isso pode estar corrompendo os dados transmitidos, pois o que consta é o erro de código 0xE0 o qual representa diferença entre o ID requisitado e o da resposta...

    No manual existem algumas informações mas não o suficiente que indiquem a necessidade de implementar a polarização ou terminação da linha. Estou aguardando mais esclarecimentos por parte do fabricante do inversor. Qualquer avanço, eu posto aqui.

  9.  

    @Thiago Miotto  obrigada por responder! Já tentei isso e não funcionou.

    @aphawk obrigada por responder! Sim, o endereço (slave ID) que estou usando é o ID 7 e ele está especificado em: node.begin(7,Serial) no código. Os parâmetros de comunicação como ID, baud rate, paridade estão todos corretos pois posso conferir no monitor que o inversor tem.

    Inclusive usei o software Modbus Poll para simular um mestre e consigo ver o tráfego de dados entre o inversor e o PC usando um conversor RS485/USB, e funciona perfeitamente..

    Também já usei o Modbus Slave para testar o código e circuito com arduino e o conversor RS485/TTL e também tenho sucesso na comunicação. Entretanto quando junto o circuito com arduino e o inversor não tenho resposta..

    • Curtir 1
  10. Olá, estou tentando realizar a aquisição de dados de geração de um inversor FV com um arduino. O Modbus RTU (MAX485) é o protocolo de comunicação aceito pelo inversor. Desta forma, estou usando o MAX485 (RS485---> TTL) e a biblioteca ModbusMaster para realizar essa aquisição. O problema é que não consigo resposta nenhuma por parte do inversor..só aparece o código de erro de timeout..O hardware está conectado da seguinte forma:

     

    INVERSOR ---- MAX 485----- ARDUINO MEGA    

    A (D+) -----------  A

    B (D-) -------------B

    GND -------------GND-------------GND

                              RO --------------RX

                              RE ---------------2

                              DE----------------3

                              DI-----------------TX   

                            VCC---------------5V

     

    Segue abaixo o código que teste. Já troquei a fiação, os pinos TX/RX por TX1  e RX1, teste RE/DE  por outros pinos mas nada funciona...Se alguém tiver ideia do que pode estar ocorrendo e puder compartilhar, agradeço muito!

     

    #include <ModbusMaster.h>
    
    #define MAX485_DE      3
    #define MAX485_RE_NEG  2
    
    ModbusMaster node;
    
    void preTransmission()
    {
      digitalWrite(MAX485_RE_NEG, 1);
      digitalWrite(MAX485_DE, 1);
    }
    
    void postTransmission()
    {
      digitalWrite(MAX485_RE_NEG, 0);
      digitalWrite(MAX485_DE, 0);
    }
    
    void setup()
    {
      pinMode(MAX485_RE_NEG, OUTPUT);
      pinMode(MAX485_DE, OUTPUT);
      // Init in receive mode
      digitalWrite(MAX485_RE_NEG, 0);
      digitalWrite(MAX485_DE, 0);
    
      // Modbus communication runs at 115200 baud
      Serial.begin(19200);
    
      node.begin(7,Serial);
    
      node.preTransmission(preTransmission);
      node.postTransmission(postTransmission);
    }
    
    bool state = true;
    
    void loop()
    {
      uint8_t result;
      uint16_t data[6];
    
      result = node.readHoldingRegisters(3, 6);
      Serial.println(result);
       delay(20); 
             if (result == node.ku8MBSuccess) {
            Serial.print("VCC");
            Serial.println(node.getResponseBuffer(0x00)/10); //reg 3
            Serial.print("I de linha");
            Serial.println(node.getResponseBuffer(0x01)/10);//reg 4
            Serial.print("Potencia");
            Serial.println(node.getResponseBuffer(0x04)/10);//reg 6
            Serial.print("Potencia aparente ");
            Serial.println(node.getResponseBuffer(0x03)/10);//reg 7
            Serial.print("Potencia reativa");
            Serial.println(node.getResponseBuffer(0x05)/10);//reg 8       
          } else {
            Serial.println("Falha de comunicacao");
          }
    
          node.clearResponseBuffer();
    
    
    delay(1000);
    }

     

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!