Gerenciando o Arduino pela Internet com um PC - Experiência para iniciantes

Olá a todos. Neste artigo, falarei sobre como consegui implementar o controle do Arduino na Internet usando um PC conectado à Internet. Em geral, esse método pode ser usado para qualquer microcontrolador, por exemplo, PIC. O método é bastante carvalho, há muito a modernizar e há muitos esquemas mais avançados, mas no caso mais simples isso é suficiente.

Em vez de se juntar


Gostaria de dizer imediatamente que, neste artigo, não irei aprofundar os meandros da programação, presume-se que o leitor tenha pelo menos o mínimo de básico. Em geral, vou lhe dizer como os recursos foram usados ​​e sobre pontos interessantes.

Pré-requisitos para a criação deste método que eu tinha durante a criação do meu carro elétrico: Zhmyak aqui! Devo dizer imediatamente que foi criado cada vez mais por interesse esportivo do que por um trabalho prático sério, mas, no entanto, funciona e pode ser útil a alguém.

O que é todo o sistema construído e como ele é implementado no hardware


O esquema de trabalho é o seguinte: do servidor, lemos o arquivo no qual os dados são armazenados usando o programa em execução no PC / laptop. Este programa via USB envia dados para o controlador. O controlador recebe dados e executa ações neles. O esquema com o servidor é atraente, pois você pode controlar o esquema sem um aplicativo, simplesmente visitando o site a partir de qualquer smartphone / tablet / pc / laptop em qualquer lugar do mundo onde haja acesso à Internet.

PS. Sobre o lado do servidor está descrito abaixo.

Neste artigo controlarei o Arduino MEGA 2560 (o equivalente chinês), mas nos bastidores o circuito funcionou sem problemas com o PIC16F877A, a única coisa que tive que usar foi o adaptador USB-TTL:



está claro que o programa PIC é um pouco diferente do programa Arduino, devido a diferentes tipos de MK, mas o princípio é o mesmo:

Recebemos dados através da porta COM, comparamos com a tabela de comandos interna e executamos a ação correspondente.

O esquema inicialmente parecia muito simples para mim, mas havia um MAS - não havia um programa que lesse o arquivo na Internet e enviasse dados para a porta COM. Nesse sentido, eu tive que escrever um programa desse tipo.

O programa foi escrito em VB6. Para ler o arquivo do servidor, o componente VB6 é usado: Microsoft Internet Transfer Control 6.0. Com sua ajuda, um arquivo de texto no servidor é simplesmente lido em uma variável de string. Depois de ler esta linha, ela é enviada para a porta COM usando o componente VB6: Microsoft Comm Control 6.0. Todo o processo de leitura de um arquivo e envio de uma linha é lido em loop usando um timer. O intervalo do temporizador pode ser alterado na configuração do programa ou diretamente durante a operação. Além disso, você pode selecionar o modo de operação da porta, seu número, o modo de operação da conexão com a Internet e um link para o arquivo lido.

Gostaria de fazer uma observação de que, com tamanhos grandes de arquivos e pequenas lacunas, o programa congela, mas continua a funcionar. O tamanho do buffer do meu programa é 512 bytes. Dado que meu MK tem menos buffer, isso é suficiente.

Um ponto importante. Um programa no MK não pode analisar dados, pode ler apenas qual caractere foi transmitido para a entrada via porta serial. Sem erros, consegui aceitar o alfabeto latino (26 caracteres AZ e 10 dígitos de 0 a 9). Um total de 36 equipes, se o algoritmo for finalizado e a análise de dados for introduzida no MK, qualquer dado poderá ser transferido. Há também a possibilidade de "doping" de software para troca de dados bidirecional.

Seleção de servidor e lado do servidor


Para o servidor, qualquer servidor com suporte a PHP , mesmo executando em um PC pessoal, teria apenas um IP estático, mas eu pessoalmente uso um Jino alugado. A parte do servidor no meu exemplo consiste em dois arquivos: páginas HTML com um formulário com botões ON / OFF para um LED e um script PHP que altera o conteúdo de um arquivo TXT a partir do qual um programa em execução no PC lê dados.

Programas


Código HTML Formulário com 2 botões, LED on / off no quadro:

<html>
<head>
<title> </title>
</head>  
<body>
<form action="work.php" method="post">
:
<p>
<input type="submit" name="sv" value="On" />
<input type="submit" name="sv" value="Off" />
<p>
</form>    
</body>    
</html>

Código PHP, aqui escrevemos o comando A no arquivo, se o LED estiver aceso, e B se ele apagar:

<?php
$cm = fopen("command.txt", "w");
switch ($_POST['sv']) {
case "On":
fwrite($cm,"a");    
    break;   
case "Off":
fwrite($cm,"b");    
    break;  
}
fclose($cm); 
?>

Agora, o código real para o Arduino:

int val; //      
void setup() {
Serial.begin(9600); //   
pinMode(13, OUTPUT); //   13  
}
void loop() {
// ,   - 
if (Serial.available()) {
val = Serial.read(); //  val   
if (val == 'a') {digitalWrite(13, HIGH);} //  a  
if (val == 'b') {digitalWrite(13, LOW);} //  b  
}}

O programa em si para ler informações no servidor com encaminhamento para a porta COM e seu código-fonte está no arquivo no link: Yandex-Disk O programa é compilado em várias versões do código, pode haver algumas diferenças na operação, mas não deve ser. No primeiro início do arquivo EXE, um arquivo de ajuda e um arquivo de configuração são gerados. Os dados desse arquivo são lidos quando o programa é iniciado, se existir. Se o arquivo não existir (por exemplo, no primeiro início do programa), o arquivo de configuração será criado com os valores padrão.

Resultados do trabalho



Em vez de uma conclusão


Neste exemplo, implementei um algoritmo simples "oak" que funciona. É claro que é possível desenvolver ainda mais, mas, no entanto, 36 equipes já podem ser enviadas neste formulário. Se você implementar a análise dos dados recebidos no microcontrolador, poderá transferir quaisquer dados. Para minhas tarefas, 36 equipes serão suficientes com a cabeça e, além disso, esta é a experiência de um iniciante :)

All Articles