Ir ao conteúdo
  • Cadastre-se

ESP8266 - A Pequena Maravilha para Comunicação WIFI


aphawk

Posts recomendados

@rodrigocirilo ,

 

Calma .....

 

Vai aparecer uma nova rede WI-FI, chamada ESP-XX.XX.    ( os xx são o MAC de sua plaquinha ) .

Conecte nela com o seu celular, acesse o IP  de fábrica, e na página de settings você configura o modo de trabalho, tipo AP, o IP que você quer usar ( claro dentro da faixa deIP de sua rede local ) , salva e reinicia e pronto !

 

Mas tem tudo isso lá no site, dá umas lidas nos programas, nos exemplos, e depois acesse o Fórum, porque tem um tutorial para iniciante lá, ok ?

 

Paulo

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@ViniciusKruz

Eu pensava que você estava a falar de anteno com rabinho. Vende para roteadores, quando queremos um posicionamento externo. Se não me engano, o ESP12 vem com o conector.

 

@lucianolcoa

Não entendo quando você se refere ao ESP ter apenas um sensor. A plaquinha ESP01 parece que tem interface (pinos) para apenas um sensor, mas o chip ESP8266 tem muito mais pinos. É necessário conhecer o datasheet e comprar a plaquinha com a quantidade de pinos de interesse. Ou estou equivocado.

 

Quanto a I2C, é um método de comunicação. O tópico também aborda. Temos links. Eu fizera pergunta sobre ele e me explicaram, ou compartilhando os links. Sobre ele você pode começar pela WIkipédia...

 

@aphawk

Eu falava de uma estrutura try...catch na linguagem. Não tenho familiaridade com Basic, mas com Java, Python, etc. Não sei de Visual Basci, por exemplo, então talvez eu esteja falando algo esquisito.

Link para o comentário
Compartilhar em outros sites

27 minutos atrás, lucianolcoa disse:

Sensores I2c eu desconheço, como funciona?

 

i2c(em duas vias)  é um protocolo de comunicação é como se fosse comunicação serial, só que com muitos periféricos ligados na mesma rede, veja a imagem:

http://www.arduinobr.com/wp-content/uploads/2014/12/i2c-bus-arduino.png

 

 

adicionado 5 minutos depois
17 minutos atrás, alexandre.mbm disse:

Eu pensava que você estava a falar de anteno com rabinho. Vende para roteadores, quando queremos um posicionamento externo. Se não me engano, o ESP12 vem com o conector.

 

A princípio eu havia soldado o conector da antena externa diretamente na plaquinha do ESP mas ficou muito frágil e ameaçava quebrar a trilha do ESP, daí preferi improvisar com a antena de notebook até comprar aquela com rabicho. O que vem com o conector é o ESP07, mas ele é bem inferior ao ESP12. Como o ESP12 vem sem o conector, vou comprar à parte e soldar.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, alexandre.mbm disse:

 

Eu falava de uma estrutura try...catch na linguagem. Não tenho familiaridade com Basic, mas com Java, Python, etc. Não sei de Visual Basci, por exemplo, então talvez eu esteja falando algo esquisito.

 

E eu nem sei o que é try... catch kkkkkk, parece campeonato de pesca americano isso .....

 

Nem sei o que é Python, Visual Basic.........

 

Java eu conheço : é um troço que tenho de instalar no meu micro para poder trabalhar nos sites da Receita Federal..... senão eu também nem usaria ! ( kkkk boa né ) 

 

Para mim, uso qualquer coisa que seja fácil. Estou numa idade em que o cérebro não quer mais aprender...  e me sinto muito seguro que faço qualquer coisa que eu precise usando Basic e Assembler...

 

Paulo

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
4 horas atrás, lucianolcoa disse:

O esp pra mim ainda tem uma limitação chata que e o fato dele ter apenas 1 sensor.

Se conhecer o protocolo I2C saberá que num barramento de 2 fios (SDA e SCL) poderá endereçar vários dispositivos ou sensores.

2014110111.jpg

 

http://zftlab.org/pages/2014110100.html

Se não tiver, instale o complemento google translator para apresentar o site traduzido.

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
46 minutos atrás, aphawk disse:

E eu nem sei o que é try... catch kkkkkk, parece campeonato de pesca americano isso .....

 

Exemplo básico em Python:

try:
    x = int(input("Please enter a number: "))
except ValueError:
    print("Oops!  That was no valid number.  Try again...")

Ref.: Documentation » The Python Tutorial » 8. Errors and Exceptions

 

Mas se aquele Basic não tem orientação a objetos, provavelmente não terá o tratamento de exceções.

 

Update

 

Exemplo básico em Java:

try {
  System.out.println(array[99]);
} catch (ArrayIndexOutOfBoundsException e) {
  System.out.println("erro: " + e);
}

Ref.: caelum » Apostila Java e Orientação a Objetos » Capítulo 11: Exceções e controle de erros

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@_xyko_ ,

 

Não, nunca ví, mas é muito interessante !

Eu já consegui usar o ThingSpeak com o ESP8266Basic, e também coloquei um DHT11 nele prá brincar. 

Impressionante a quantidade de sensores I2C desse link... eu estou enchendo o saco do autor do Esp8266basic para ele suportar o BME280, vai ajudar muito a fazer algo desse tipo só que com bem menos módulos.... vamos torçer !

 

@alexandre.mbm

 

Realmente isso aí não é algo que eu entenda... o Python ainda entendí, mas o Java.....

 

Mas nao precisa ser orientado ao objeto para ter tratamento de erros. Já em 1985 o IBM PC-DOS 2.0 tinha um excelente suporte de tratamento de erros; a grande maioria das funções do IBM-PC BIOS ( puro assembler ) também tinha um excelente suporte. Quando o programador é bom, ele sabe o que que pode dar errado e implementa tudo o que for necessário para resolver isso.

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

 

@alexandre.mbm  O Paulo conheceria o try{}catch{} se ele tivesse evoluído com a linguagem que ele tanto defende (Basic>>Visula Basic) kkkkkk Até parece que o Paulo não conheça um try/catch... kkk até parece!!

 

1 hora atrás, aphawk disse:

Para mim, uso qualquer coisa que seja fácil.

 

Paulo, pra mim seu cérebro não tá cansado não, ele ta é preguiçoso mesmo kkkkk

 

Aposto que quando tiver um bom motivo você ainda vai btalhar muito com java, javascript, css... olha que você ainda vai dar até exemplo aqui de joomla kkkk, claro... quando tiver motivação pra isto, uma hora ou outra os ESPs vão te dar este "gás".

adicionado 2 minutos depois

@rodrigocirilo  Realmente não conheço!! mas se for de 2.4Ghz creio que dê certo sim.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@aphawk

Eu também me sinto desse jeito, não consigo aprender com a mesma facilidade de quando eu tinha por volta de 20 anos (naquela época o céu era o limite), agora para aprender alguma coisa nova é um parto, só vai com muita dificuldade e muito esforço, mas ainda consigo alguma coisa (esquecendo outra no lugar). Já teve uma época em que a linguagem C parecia grego para mim, só com uma motivação muito forte para aprender. Só com o ESP8266 que eu tive realmente interesse de decifrar como o C funcionava, e agora estou conseguindo quebrar o galho em C, mas ainda tem muita coisa que eu ainda não entendo direito. Mas acho que vou conseguir evoluir mais rápido quando conseguir fazer o Eclipse funcionar com o ESp8266, está dureza.

 

Para ler um PT100 no Arduino Mega usando o Bascom, foi complicado pois não tinha nada pronto, tive que pesquisar no datasheet do componente ADS1115 e fazer a rotina funcionar em Bascom na marra. Pena que eu não consegui a precisão que eu queria, o meu objetivo era +/-0,01°C (bastante ambicioso), consegui apenas +/-0,1°C com considerável instabilidade (teoricamente conseguiria precisão melhor). Ainda estou estudando o porque ficou tão cheio de ruídos na medição, não adiantou ler uma centena de vezes e tirar a média e nem colocar capacitores de filtro, talvez colocando uma referência de tensão de precisão (com precisão de +/- 0,05%) para fornecer uma polarização do PT100 de alta estabilidade consiga uma resultado melhor. Mas o que é realmente importante para a precisão da leitura da resistência no PT100 é a resistência de referência, e esta é bastante precisa e estável.

 

Estou com outro ADS1115 e um outro PT100 incapsulado que pretendo qualquer hora destas experimentar no ESP8266 (agora programando em C), em que vou testar algumas ideias para melhorar a estabilidade e precisão (a qualquer custo), estou com uma resistência de referência de 100ohms +/-0,01% 10ppm por °C (custou caro), e uma tensão de referência de 2,042V +/-0,05% para energizar a resistência de referência e o PT100, e ainda vou colocar uns capacitores de filtro para minimizar as interferências elétricas, se der tudo certo vou conseguir finalmente uma medição de temperatura com grande precisão. Eu sou realmente bastante chato com a precisão.

 

@aphawk

Dei um tempo no basic no ESP8266, portar o BME280 para funcionar no basic (fazendo a rotina de comunicação em basic, talvez seja mais fácil mexendo no próprio fonte do ESPbasic) estava me dando muito trabalho, e eu não consegui compreender porque o mesmo componente funcionava tão bem rodando com rotinas em C e às vezes eu nem conseguia ler nada a partir do ESPbasic rodando a rotina de teste do I2C. Quando eu conseguir entender isso talvez eu mate a charada.

 

E eu continuo com pouquíssima disponibilidade de tempo para me desenvolver no C e no ESP8266, senão já teria matando muitas das minhas dúvidas e talvez já tivesse resolvido o problema do BME280 em basic, a evolução deste jeito é muito arrastada. Acho que deve ser mais fácil para mim incluir no fonte do ESPbasic usando a biblioteca em C do BME280 e implementar a função, do que fazer funcionar em basic programando em basic. É bem capaz de você, Paulo, conseguir, você já sabe como compilar o ESPbasic no Arduino IDE, e eu ainda nem tentei isso.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 horas atrás, lucianolcoa disse:

Salve grande Aphawk, antes de mais nada desejo saudá-lo. Pois voce pode até não se lembrar de mim, mas quando iniciei meus estudos nos embarcados era um verdadeiro amador e seus conselhos me fizeram dar uma "guinada" nesse ramo de embarcados. De modo que não me considero expert. mas um veterano estudioso no assunto. ^^

Babação de ovo a parte, kkkk. To aprendendo BASCOM que enjoei daquela IDE do arduino, fora que os códigos no arduino ficam extremamente pesados e usando outrsa linguagens ficam leves, a possibilidade de usat ATTINYS etc. E por ahe me veio umas duvidas que acho que, se voce nao souber responder. Ninguem saberá,kkkkkkkkkkkkk.

 

1° é possível implementar uma biblioteca no bascom? do jeito que fazemos no arduino ou pic?

2°como faz pra ler mais de 2 sensores no bascom e postar o valor no lcd? consigo ler apenas 1 sensor e postar uma string no lcd.

Bascom sou novatao :(

 

Opa  meu amigo, fico muito feliz em ler isso que voce escreveu !!!

Mas eu apenas indiquei o caminho, dependia de você seguir a trilha, e que bom que voce continua nela ! Parabéns pela insistência !

 

Quanto às suas perguntas :

 

1 - Sim, é possível, mas semelhante ao que ocorre no Arduíno, você tem de ter um excelente domínio da linguagem.

 

2 - ?????? Como assim ler 2 sensores ?????  Oras, no Bascom você pode até criar 4 interfaces I2C e usar o mesmo tipo de sensor em cada uma das interfaces, no mesmo endereço !  

O Bascom é muito poderoso, e eu recomendo que voce siga o meu tutorial, que está aí em cima no tópico destacado. E acompanhe também o Fórum do Bascom, tem muitos engenheiros lá, e a gente sempre aprende muito vendo o que esses feras fazem.

 

Ser novatão é muito legal, tudo é uma nova descoberta, tudo é novidade, e logo você vai estar dominando ele e fazendo miséria !

 

Se você reparar, eu hoje uso Assembler junto com o Basic do Bascom, e tiro leite de pedra desse jeito. Quando a necessidade aparece, a gente dá o salto para poder suprir !

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
40 minutos atrás, aphawk disse:

Realmente isso aí não é algo que eu entenda... o Python ainda entendí, mas o Java.....

 

São tão parecidos...

Mas não são equivalentes.

 

Se aquele array não tiver ao menos 100 posições, é disparada a exceção ArrayIndexOutOfBoundsException, que será "tratada".

 

40 minutos atrás, aphawk disse:

Mas nao precisa ser orientado ao objeto para ter tratamento de erros. Já em 1985 o IBM PC-DOS 2.0 tinha um excelente suporte de tratamento de erros; a grande maioria das funções do IBM-PC BIOS ( puro assembler ) também tinha um excelente suporte. Quando o programador é bom, ele sabe o que que pode dar errado e implementa tudo o que for necessário para resolver isso.

 

Eu não escrevi "tratamento de erros". Eu escrevi "tratamento de exceções".

 

Em todo caso, gostaria de receber alguns dos exemplos que você tem em mente, daquela época. Para ver se é como estou pensando, outro paradigma.

 

37 minutos atrás, ViniciusKruz disse:

O Paulo conheceria o try{}catch{} se ele tivesse evoluído com a linguagem que ele tanto defende (Basic>>Visula Basic) kkkkkk Até parece que o Paulo não conheça um try/catch... kkk até parece!!

 

Eu não perco meu tempo em interpretar ironias a priori. Se você quiser continuar o assunto, por favor seja objetivo, claro, explícito, simples. Ou você estará falando para si e para os outros mas não para mim.

 

Se o @aphawk também escolheu não ser simples, e se dirigir a mim com artifícios, ainda não sei, mas o problema terá sido dele, pois perdeu tempo. Não tenho tempo para besteiras (exercícios de interpretação de textos). Eu tenho respondido ao que está escrito. Simplesmente isso.

 

Coloquei os exemplos porque podem ser de utilidade comum, contribuir para a comunicação do tópico.

 

Solicito exemplos porque gosto de aprender. Quem gosta de ensinar gratuitamente, ensine. Quem não gosta, não ensine, ou cobre por isso.

 

Link para o comentário
Compartilhar em outros sites

10 minutos atrás, alexandre.mbm disse:

Eu não perco meu tempo em interpretar ironias a priori. Se você quiser continuar o assunto, por favor seja objetivo, claro, explícito, simples. Ou você estará falando para si e para os outros mas não para mim.

 

Calma cara, foi só uma forma de descontrair, se você não gostou ou interpretou de forma ofensiva é problema seu, não foi a intenção.

 

 

11 minutos atrás, alexandre.mbm disse:

Solicito exemplos porque gosto de aprender. Quem gosta de ensinar gratuitamente, ensine. Quem não gosta, não ensine, ou cobre por isso.

 

E você solicita mesmo!!! E cá entre nós, não vejo nada de errado nisso. O que acho estranho é que pra quem gosta tanto de explicações e questiona tudo, não seja tão generoso quando solicitado, lembra quando te pedi ajuda e me mandou uma mensagem privada me cobrando pela ajuda?

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
1 minuto atrás, ViniciusKruz disse:

E você solicita mesmo!!! E cá entre nós, não vejo nada de errado nisso. O que acho estranho é que pra quem gosta tanto de explicações e questiona tudo, não seja tão generoso quando solicitado, lembra quando te pedi ajuda e me mandou uma mensagem privada me cobrando pela ajuda?

 

Lembro sim. E não contradiz o que eu disse no que cito de mim agora:

 

20 minutos atrás, alexandre.mbm disse:

Solicito exemplos porque gosto de aprender. Quem gosta de ensinar gratuitamente, ensine. Quem não gosta, não ensine, ou cobre por isso.

 

Busco ser generoso quando posso, sem fazer disso um fim. Publico coisas por aí, inclusive projetos. Mas "não gosto" da área. Eu lhe ofereci um serviço porque daria conta e PRECISO de fazer assim. Em 2006 eu abandonei meus estudos porque não queria jamais trabalhar na área. Hoje estou me vendo obrigado, por circunstância e consciência, a oferecer micro-serviços na Internet.

Link para o comentário
Compartilhar em outros sites

@alexandre.mbm ,

 

Bom, para mim tratamento de exceções só tem sentido como tratamento de erros.

 

Se uma determinada função espera receber dados para os quais ela foi escrita, e algo garante que sempre receberá esses dados, então nunca haverá uma exceção. A função sempre vai retornar o resultado correto.

 

Mas se qualquer um pode chamar essa função, e levar para ela algum dado que não seja o que ela espera,  se não houver um tratamento para isso, essa função pode entregar como resultado alguma informação errada. Esta situação é exatamente isto : uma exceção à regra ! E a rotina que faz isso nada mais é do que uma simples rotina de tratamento de erro.

 

Infelizmente é mais um caso de um nome bonito para algo que é óbvio.

 

Como exemplos posso te dar vários.

 

Existe uma função no PC-DOS que apaga um arquivo. Basta eu chamar ela com um pointer que indica qual o arquivo. Então existe outra função que eu forneço o nome do arquivo e ela me retorna um pointer. Se o nome do arquivo não existir, ela me retorna um valor zero em um determinado registrador.

A minha tarefa, como programador, é SEMPRE verificar se esse registrador retornou zero, ANTES de eu pegar o pointer retornado. Senão seja qual for o valor que estiver retornado, é errado. Se eu fornecer esse pointer errado à rotina que apaga um arquivo, posso até apagar o arquivo errado, ou ainda pior, essa rotina pode se perder, e o micro ficaria travado.

Isso de ter um registrador auxiliar que retorna se a função foi bem sucedida ou não é um tratamento de exceção.

 

No Bios do IBM-PC tem uma função que muda o modo gráfico da placa de vídeo. Ela aceita um montão de modos diferentes, mas se eu chamar um determinado modo para o qual o monitor utilizado não tenha suporte, então a imagem vai se perder, e nada pode ser feito. Então, inventaram algo bem legal : se você muda , e a tela fica maluca, em 10 segundos a tela volta para a resolução anterior ! Isso foi implementado no Windows95.

 

E Isso foi herdado até hoje : repare que no Windows você pode mudar a resolução da tela, e ele muda a tela e fica esperando alguns segundos para que você confirme que é isso mesmo que você quer fazer. Se a tela ficar maluca, é só esperar alguns segundos que o Windows vai voltar para a resolução que estava !

 

Isso é um tratamento de exceção, ou melhor , um tratamento de erro.

 

 

 

Pessoal, não pensem que eu estava brincando... não faço mesmo a mínima ideia do que é isso de try ... catch . Lembrem-se de que eu estudei Eletrônica, a programação aprendi na prática, não fiz nenhum curso especial para isso. O que faço é sentar, pensar em algo que resolva o problema, e começo a digitar, só isso. 

 

Quanto a usar Java, no sentido de saber o que estou fazendo com ele ..... só se aparecer alguma coisa que possa render muito dinheiro kkkkk !  Eu nem consigo entender a linguagem do Arduíno, imagine essas coisas mais avançadas kkkkk !

 

O que eu faço é usar os comandos que eu tenho na mão. No ESP8266Basic existem comandos que ajudam muito a conseguir resultados sem que eu saiba exatamente todo o trabalho embutido no comando. Ou seja, simplifica o meu trabalho !

 

Aproveitando... afinal o que é um try... catch ?????????????????????????

 

 

adicionado 12 minutos depois
1 hora atrás, ViniciusKruz disse:

Outro dia explodi vários TRIACs tentando fazer uma fonte para os ESP que ocupasse o mínimo de espaço possível, sem sucesso desisti, agora, olha só o que eu encontrei: mini-fonte

 

Até já comprei uma pra testar.

 

Nossa que coisa mais legal !!!!!

 

Vou ver se acho no Ebay para ter uma ideia do preço disso....

 

Atualização :

Achei uma versão que já entrega 3,3 volts !!! Menos da metade do preço ....

 

http://www.ebay.com/itm/Hi-link-HLK-PM03-220V-to-3-3V-Step-Down-Buck-Isolated-Power-Supply-Module-/172299004088?hash=item281dd228b8:g:eIoAAOSw0UdXqLyZ

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

22 minutos atrás, aphawk disse:

Aproveitando... afinal o que é um try... catch ?????????????????????????

 

 

é quando você ão quer que aquele trecho seja executado caso d~e algum erro em alguma linha. poe exemplo, em C#:


 

try//testa cada função
{
    função1();//se alguma delas der erro, não executa nenhuma
  	função2();
    função3(); 
}
catch
{
   messagebox.show("Erro ao executar.");
}

Em C# depois do catch ainda tem a opção "finally", se tudo der certo, executa esta parte

 

try{

}catch{

}finally{

}

 

Pensei realmente que você sabia disso rsrsrs.

 

 

 

Link para o comentário
Compartilhar em outros sites

@ViniciusKruz ,

 

Ahhhh  .... obrigado por me mostrar !!!!!

 

Me parece algo específico do C, por isso que não conhecia hehehe ! 

 

Me passou pela cabeça que se essas funções fossem muito bem escritas e testadas, esse "catch" não seria necessário ....  realmente me sinto de novo um Dinossauro, quando eu programava tudo era bem diferente....

 

Paulo

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

1 minuto atrás, aphawk disse:

Me passou pela cabeça que se essas funções fossem muito bem escritas e testadas, esse "catch" não seria necessário

 

Tem casos que não depende da "escrita", por exemplo, supondo que precise executar as seguintes funções:

 

incrementa X;  

soma X+45;

var A="ligado";

abre a porta serial();

envia pela serial(A,X);

 

Se der um erro ao abrir a porta serial por exemplo, tudo o que está antes não será afetado. Dá pra fazer isto na unha sem o try/catch, porém dá muito mais trabalho, e bota muito nisso.

 

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Aproveitando para mostrar novidades ...

 

Hoje eu comprei duas peça disto aqui :

 

2015-10-31T11:32:08.323Z-smartWIFI%2012.

 

https://www.tindie.com/products/Knewron/esp8266-based-smartwifi-development-module/

 

É um Nodemcu que já tem um Led RGB  e um circuito carregador de bateria Lipo !!!!

 

Assim posso fazer meu projeto alimentado por uma 18650 e que pode ser carregada por um pequeno painel solar que gere 5,5 Volts por 100 mA !

 

Tive de entrar em contato com o fabricante, e comprei via Paypal direto com ele, fora do Ebay.

 

US$ 12 cada placa. Total de US$ 27,50 com S&H de US$ 3,50 .

 

Vamos ver quando chegar....

 

 

adicionado 2 minutos depois
4 minutos atrás, ViniciusKruz disse:

Se der um erro ao abrir a porta serial por exemplo, tudo o que está antes não será afetado. Dá pra fazer isto na unha sem o try/catch, porém dá muito mais trabalho, e bota muito nisso.

 

Pois é exatamente o que eu fazia, tinha de pensar em tratar todas essas possibilidades, e em Assembler ...... ..... por isso que me sinto um Dinossauro kkkkkkk

 

Paulo

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@aphawk, muito obrigado pelas interações. Eu compreendo que o seu modo de programar é característico de quem usa o baixo nível. O que me foi ensinado formalmente sempre o foi em alto nível, partindo de Java. Eu nunca de fato estudei de forma duradoura coisa como C e Assembly. Depois eu fui me interessar por Python e Ruby.

 

É bom que fique claro que "tratamento de exceções" e "tratamento de erros" definitivamente são termos que não se equivalem. O primeiro é de uma terminologia associada a estruturas try...catch. Apesar de que todo tratamento de exceção é de fato um tratamento de erro, mas a recíproca não é verdadeira.

 

Tratamento de exceções é um assunto especialmente afim de engenharia de software de aplicação. Existem exceções de lógica, de rede, de hardware, e por aí vai.

 

Uma boa prática notória e fácil de compreender: fazer um try...catch guloso, quase [ou] em camada de frontend, para se precaver de uma falha de hardware não congelar tudo para usuário final de uma interface rica. Outras boas práticas são, por exemplo, customizar exceções padrão em exceções de seu próprio desenho.

 

Tratamento de exceções é algo fantástico, mas sei bem que não existe em C — ou pelo menos em Assembly.

 

Outros exemplos

 

Também se faz tratamento de exceções para transações atômicas em um banco de dados. E imagine também clusters redundantes provendo um sistema web...

 

Essas coisas tornam-se fáceis no alto nível. Naturalmente a engenharia de software vai nos ensinado que é inteligente lançar mão de tais artifícios, deixando "otimizações" mais para as camadas de baixo. Não é apenas questão de produtividade, passa a nos dar garantias.

 

Exemplo em Visual Basicachei!

Dim Top As Double = 5
Dim Bottom As Double = 0
Dim Result As Integer
Try
    Result = CType(Top / Bottom, Integer)
Catch Exc As System.OverflowException
    MsgBox("Attempt to divide by zero resulted in overflow")
End Try

Ref.: How to: Catch an Exception in Visual Basic

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@alexandre.mbm,

 

Não concordo com o seu enfoque justificando a precaução.

 

Esse tipo de programação é o que fez o Windows sair de míseros 15 Mb para dezenas de gigabytes de código.

Um programador que conhece o hardware e o software que receberá o seu código não precisa ficar com medo de gerenciar as exceções, pois ele tem o domínio do que pode causar uma exceção. Claro que não é o caso de quem programa para o Windows hoje .....

 

A turma que programa em C não parece que tem o controle de nada !  Usam dezenas de bibliotecas feitas pelos outros, e ficam com tanto medo de algo dar errado que fazem essa perda de tempo e código enorme de try e catch em tudo que é lugar do programa !

 

Assim é fácil programar sem saber de nada profundamente. Mas é inteligente ?

 

De que adianta querer se precaver de uma falha de hardware ? Se uma memória falhar, ou se o processador travar, nada adianta todo o tratamento de try and catch ! Se a fonte bichar, adeus programa do mesmo jeito !

 

O que quase sempre falha é o software..... e se o programador não tem um controle preciso sobre interrupções que podem fazer com que o programa se recupere, é por pura falta de capacidade para fazer o programa como deveria.

 

Se um programador manda criar uma matriz de 1000 elementos tipo double , e não tiver memória suficiente para isso, de quem é a culpa ? Dele ? Ou da linguagem ?

 

Ah sei ... nessas linguagens tipo C ninguém se preocupa de verificar quando necessário se tem memória livre, melhor arriscar, jogar e rezar para o try and catch resolver o problema, mesmo que isso torne o código cada vez mais grande e ineficiente e lento.

 

como isso é um recurso inteligente ?

 

Um recurso que permite a um programador medíocre fazer um programa que fica muito maior do que deveria e bem mais lento não é sinal de inteligência, e sim de comodismo e ineficiência !

 

Inteligente é o programador que domina o seu ambiente, tanto a nível de hardware como de software. Se não tem esse domínio, vai fazer outra coisa !

 

1 hora atrás, alexandre.mbm disse:

Tratamento de exceções é um assunto especialmente afim de engenharia de software de aplicação. Existem exceções de lógica, de rede, de hardware, e por aí vai.

 

Se existem essas exceções em um sistema, o sistema foi malfeito. Não houve um projeto direcionado desde o início, onde vários engenheiros se sentaram durante dias para desenhar o sistema a nível de hardware e de SO para usar esse hardware.

 

Onde existe o tratamento de erros, nunca vai ter possibilidade de uma "exceção" sabe-se lá de onde ela surja, pois as camadas interiores do sistema conseguem tratar o erro e informar as camadas externas. Claro que o sistema teria de ser todo pensado e desenvolvido para isso.

 

1 hora atrás, alexandre.mbm disse:

É bom que fique claro que "tratamento de exceções" e "tratamento de erros" definitivamente são termos que não se equivalem. O primeiro é de uma terminologia associada a estruturas try...catch. Apesar de que todo tratamento de exceção é de fato um tratamento de erro, mas a recíproca não é verdadeira.

 

Uma exceção é um evento que causa um erro, ou uma anomalia em um sistema. O tratamento do erro é o processo de elimina essa anomalia. Estão intimamente interligados.

 

Concordo que o meu jeito é o de quem programa em Assembler. Mas quem faz isso SEMPRE TEM O DOMÍNIO DO HARDWARE E DO SOFTWARE !

 

Diferente de quem programa em alto nível, é muito mais demorado, mas muito mais eficiente também; eu tenho de prever todas as situações que podem fazer o meu programa dar pau, mas eu como projetista sei precisamente aonde pode acontecer isso.

Se eu leio um valor de  alguma entrada, e sei que em algum lugar vou dividir algum numero por esse valor lido, claro que eu vou cuidar para que esse valor não seja zero. Pois isso é um erro. Aí é que vem o tratamento de erro.

 

Sei que quem programa para o Windows não tem o controle de nada, não sabe os milhares de erros que podem acontecer, então tem de usar esse try and catch. Mas a culpa é do Windows !

 

Repare que quando programamos para um microcontrolador, que afinal é o objetivo de todos nós aqui, temos SEMPRE o controle se quisermos !  Não tem nenhum sentido usar isso aqui, pois perde-se bytes preciosos, e tempo precioso também.

 

Estamos discutindo uma abordagem para sistemas desktop, contra uma abordagem para uma mísera plaquinha com um microcontrolador kkkkkkk !

 

 

 

adicionado 7 minutos depois
3 horas atrás, ViniciusKruz disse:

Vai dar pra ir brincando um pouquinho. Pago beeemm mais caro nas minhas compras que você rsrsrs.

 

Mas você tem o produto em 1 semana !!!  Eu demoro meses para receber !!!!!

 

Mas sempre compro coisas, até o ano passado todo mês gastei uns R$ 1.000,00 de compras no Ebay. Por exemplo, o  MPU6050 eu tenho 5 plaquinhas, o DS3231 tenho algumas também. Comprei no ano passado, e usei apenas o MPU6050 no meu avião de RC. Fontes de pequeno porte tenho umas duas dúzias no total, de 3,3 / 5 / 9 / 12 Volts. O DS3231 está aguardando algum uso ....

 

Conforme vou usando, compro para repor.

 

Hoje, já tenho muita coisa, não preciso mais comprar tanto, então estou gastando uns R$ 500,00 por mês este ano.

 

Prefiro gastar neste hobby que me mantém ativo.

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
33 minutos atrás, aphawk disse:

Estamos discutindo uma abordagem para sistemas desktop, contra uma abordagem para uma mísera plaquinha com um microcontrolador kkkkkkk !

 

Minha intenção não era abrir discussão, e vou tentar encerrá-la logo por aqui. Você tem razão em vários pontos, mas olhando tudo de um ângulo muito específico. Se não fosse a programação de alto nível, não teríamos os sistemas complexos e ricos que temos hoje. O Windows "cresceu" exageradamente, mas as distribuições GNU/Linux mais renomadas infelizmente também engordaram. E eu não uso Windows...

 

Tratamento de exceções é um recurso poderosíssimo usado numa obra de arte da engenharia de software: Java. Dê uma estudada em Design Patterns com Java, e principalmente observe como as exceções existem no SDK. É formidável! Não trata-se do que fiz parecer: gambiarra para programadores ruins conseguirem fazer coisas.

 

33 minutos atrás, aphawk disse:

Concordo que o meu jeito é o de quem programa em Assembler. Mas quem faz isso SEMPRE TEM O DOMÍNIO DO HARDWARE E DO SOFTWARE !

 

Dependendo. Um pouco de antropologia faz bem. Criar um Windows 10 em Assembly é tornar-se escravo dos meios, das coisas, e desumano (consigo mesmo).

 

Não deixem que as máquinas sejam seus carrascos!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...