使用PC通过Internet管理Arduino-初学者体验

大家好。在本文中,我将讨论如何使用连接Internet的PC来通过Internet实现Arduino控制。通常,此方法可用于任何微控制器,例如PIC。该方法非常漂亮,有很多需要现代化的东西,还有许多更高级的方案,但是在最简单的情况下,这就足够了。

而不是加入


我想马上说,在本文中,我不会深入探讨编程的复杂性,它假定读者至少具有最低限度的基础知识。我将大致告诉您资源的使用方式以及有趣的地方。

创建电动汽车时,我创建此方法的先决条件:Zhmyak在这里!我必须立即说,它是出于体育兴趣而不是为了认真的实际工作而创建的,但是它仍然有效并且对某人有用。

整个系统是基于什么构建的,以及如何在硬件中实现


工作方案如下:从服务器上,我们使用PC /笔记本电脑上运行的程序读取存储数据的文件。该程序通过USB将数据发送到控制器。控制器接收数据并对其执行操作。服务器方案具有吸引力,因为您可以在没有应用程序的情况下控制方案,只需通过可访问Internet的任何地方的任何智能手机/平板电脑/个人电脑/笔记本电脑访问该站点即可。

PS。关于服务器端的描述如下。

在本文中,我将控制Arduino MEGA 2560(中文版本),但在后台该电路可与PIC16F877A正常工作,我唯一需要使用的就是USB-TTL适配器:



很明显,PIC程序与Arduino程序略有不同,这是由于不同MK的类型,但原理相同:

我们通过COM端口接收数据,将其与内部命令表进行比较并执行相应的操作。

该方案最初对我来说似乎很简单,但是有一个BUT-没有程序可以读取Internet上的文件并将数据发送到COM端口。因此,我不得不编写这样的程序。

该程序是在VB6上编写的。要从服务器读取文件,请使用VB6组件:Microsoft Internet Transfer Control 6.0。在它的帮助下,服务器上的文本文件只需读入字符串变量即可。读取此行后,将使用VB6组件将其发送到COM端口:Microsoft Comm Control 6.0。使用计时器循环读取文件和发送行的整个过程。定时器间隔可以在程序配置中更改,也可以直接在操作过程中更改。此外,您可以选择端口的操作模式,端口号,Internet连接的操作模式以及指向可读文件的链接。

我想说一句,如果文件较大且间隙较小,该程序将冻结,但可以继续工作。我的程序的缓冲区大小为512字节。鉴于我的MK缓冲区较少,这就足够了。

重要的一点。MK中的程序无法解析数据,它只能读取通过串行端口传输给输入的字符。没有错误,我设法接受了拉丁字母(26个字符的AZ和10位0-9的数字)。总共36个团队,如果算法完成并且将数据解析引入MK,则可以传输任何数据。也有可能使用“掺杂”软件进行双向数据交换。

服务器选择和服务器端


对于服务器端,任何支持PHP的服务器(即使在个人PC上运行)也只能具有静态IP,但我个人使用的是租用的Jino。在我的示例中,服务器部分由两个文件组成:HTML页面,其表单带有一个用于LED的ON / OFF按钮和一个PHP脚本,该脚本更改TXT文件的内容,PC上运行的程序从该TXT文件读取数据。

软件


HTML代码 带2个按钮的表单,板上的开/关LED:

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

PHP代码,如果LED灯亮着,我们在这里写命令A到文件,如果它熄灭,则写B:

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

现在是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  
}}

该程序本身用于在服务器上读取信息并转发到COM端口,其源代码位于以下链接的存档中:Yandex-Disk该程序被编译为多个版本的代码,操作上可能会有一些差异,但不应如此。在EXE文件的第一个开始处,将生成一个帮助文件和一个配置文件。程序启动时(如果存在)从该文件中读取数据。如果文件不存在(例如,当您第一次启动程序时),那么将使用默认值创建配置文件。

工作成果



而不是结论


在这个例子中,我实现了一个简单的“橡木”算法。当然有可以进一步发展的地方,但是,已经可以用这种形式派遣36个团队。如果您在微控制器中实现传入数据的解析,则可以传输任何数据。对于我的任务,只有36个团队有足够的头脑,而且,这是初学者的经验:)

All Articles