-
Posts
34 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
posts postados por WMAC
-
-
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..
-
1
-
-
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.
-
@GuilhermeGB Obrigada mesmo! Deu certo aqui! Agora o problema que estou tendo é com a comunicação serial entre o arduino mega e o esp01.. abri outro tópico para ver se consigo alguma ajuda sobre.
-
@GuilhermeGB Obrigada, Guilherme. Eu entendi a lógica entretanto não entendo como passar isso pro for..
Poderia exemplificar, por favor?
-
@GuilhermeGB Sim, mas você sabe como eu poderia fazer isso para vários valores que vão enviados na mesma string e separados por ";", por exemplo?
-
@GuilhermeGB Obrigada por responder. Sim mas fiquei em dúvida em como fazer para "desmontar" essa string com os valores dos sensores quando ela chega ao esp01..
-
Olá, glra... estou tentando enviar dados de leitura de alguns sensores em uma string pela serial do arduino para um esp01 ler e "desmontar" para enviar os dados pra web. Alguém pode me orientar, por favor... sobre como montar e enviar essa string e como converter os valores em float quando chegam no esp? Agradeço.
-
@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.
-
@aphawk Obrigada pela dica! Teria algum pra indicar, por favor?
-
@Sérgio Lembo Muito obrigada! Usei aqui, deu tudo certo!
-
2
-
-
Olá, pessoal.
Estou tentando alimentar um circuito com o NodeMCU com uma bateria chumbo ácido de 12V 12 Ah. A tensão fica fica entre 13,5 e 13,8V. Eu queria saber se o regulador de tensão LM 2596 seria adequado para essa aplicação.
Obrigada.
-
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.
-
@Flávio Pedroza Foi esse mesmo que usei! Muito obrigada pela ajuda!
-
@Matheus Maldi obrigada por responder! Pode anexar o código, pls rsrs
@Matheus Maldi e @Flávio Pedroza muito obrigada, agora deu certo!
-
@Matheus Maldi Pronto..pelo Modbus Poll eu tenho os 2 valores dos regs em inteiro que é 50938 e 1, o valor total pelo medidor é 116474
-
@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...
-
@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..
-
Olá, gente. Estou tentando ler um valor inteiro que ocupa 2 registradores (32 bits) com o arduino. O manual do produto informa que o padrão para variáveis de 32 bits é Lo-Hi.
Desde já, agradeço.
-
@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!
-
2
-
-
@aphawk Obrigada por responder! Sim, esse módulo já tem um resistor de terminação. Sobre trocar de library já testei todas que consegui encontrar e nada..kkkk
-
@aphawk Olá, estou usando o conversor TTL pra RS485 (FIGURA 1). Uma coisa que percebi e que não citei aqui é que o erro E0 só aparece quando eu não conecto o GND do driver RS485 do inversor ao do arduino. Se eu conectar passo a receber erro de timeout...
-
@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.
-
@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..
-
1
-
-
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
Como receber e desmontar strings de "floats" em C?
em Microcontroladores
Postado
@devair1010 Obrigada por responder, então a questão é que a string vai sendo recebida caractere por caractere na serial, e isso tá dificultando a implementação da lógica por mim uma vez que dependendo do tempo a string já tá pelo meio..