lizeqiangd 发表于 2013-7-3 02:39:25

Android和iOS与Arduino或STC51通信方案

本帖最后由 lizeqiangd 于 2013-7-18 20:37 编辑

AConnect(单片机通信解决方案之小小的一)
作者:lizeqiangd 地址:http://www.acgs.me/wordpress/topic/aconnect_manual/ 邮箱:[email protected]
在极客工坊首发,有问题直接帖子回复我或者发送email给我,秒收邮件回复。
<!--more-->

BUG都修复了。用法很容易。有兴趣可以直接发给我email到[email protected] 秒回信息不超过30秒。
下载最下面的百度网盘内容就ok了,里面有ios android和pc端 还有串口助手
恩。随手做的。应付下老师,既然做过了,就拿出来送个大家。
首先这是一套服务功能程序。
用的Adobe Air做的。基于沙箱问题,他没有办法访问到串口,因此你需要下载串口代理。我已经转到我的网盘里面了。
http://pan.baidu.com/share/link?shareid=2618777793&amp;uk=2902866394 这个是下载地址。

串口代理软件里面打开右边,

win7的朋友点开【右边】 然后在【通讯类型】里面 选择【串口代理】

在这个界面下面 选择你【串口号】【代理端口号】(是Socket的,等会软件可以更改)
然后点击【打开串口】【启动代理】

这样你的Arduino或者STC51使用串口发送的数据就会发送到电脑上并将电脑作为Socket服务器发送到指定的端口上

之后你需要打开文件夹【AConnect(3.6)】这个3.6是代表使用Air 3.6发布的。理论上都能用,不需要装什么插件。不能用或者什么bug的话请去adobe官网下载最新的air。然后打开文件夹里面的【AC_Remote.exe】程序。
程序的界面如下。(这个是我以前用来做一站式平台用的,里面还有其他一些功能,大家可以无视,或者自己摸索摸索看看?)


程序本身已进入就会使用RTMP协议连接至我的服务器,该协议是Adobe自己弄的,我使用起来方便快捷,还有一点好处就是他速度快。具体是不是不做探讨,至于你信不信?反正我是信了。


左上角的用户名是ES_Guest开头没什么意义,下面的cid代表你这个客户端的id,等会手机遥控或者其他遥控都需要这个id。

点击这个地方可以进入网络设置部分,大家没登陆账号就登陆不了系统,但是还是可以让用户重新登陆到服务器的。当服务器连接断开的时候,比如你电脑待机啊休眠啊之类的,左上角会变成closed。你就需要打开这里然后点击下面你的【重新连接】或者应该是【开始连接】。看到右上角显示connected就代表你成功连接到服务器了。


程序界面介绍:
上面的框是显示从网络上面发到你电脑的信息,或者是【本机发送】的内容,这些信息会通过串口发送到单片机上。
没有做滚动条,但是可以用鼠标滚轮在上面滚动。

下面的框是显示从单片机发挥到电脑的信息:xxxxx类似这样?啥都行啦,还有就是,这里会显示是否链接到socket。
如果你之前的串口代理开成功了,这个软件会显示Connection:connected.如果显示 ioerror 或者 安全错误,那就是你的端口低于8000或者端口错了。 默认软件设置的端口是。 软件下面可以更改。


本机测试用输入框是本机直接输入一串String给单片机,STC51的用户就比较惨,处理比较麻烦,但是我等会给范例。

!!!***********!!!!!!!!!注意↓
然后就是一个不好意思的地方,那就是你从单片机接受到的数据时【默认】会发送到全网所有的客户端的,只有在你接受到信息的时候,这个客户端才会更改这个号码让他发送到(他之前接受到的信息的地方)
/*也就是说,你接入单片机,单片机发送回来的信息会发送给全网,这个时候如果其他人也打开这个客户端,他就会接收到你单片机发来的信息,然后他的客户端就会自动发送到你的客户端上,然后你的客户端又会更改成发送到他的客户端上。。
*/
本身就打算我一个人用,明天回家重新打包发布一下就ok,但是麻烦的呢。。。
在下面就是显示本机的识别号,有点重复单也ok

最下面就是socket服务器的地址和端口

获取本机就是重新刷新下本机的地址,这个功能没用
清空文本框给洁癖的人用,或者我文本框出bug无法自动到最底
断开连接就是断开socket连接,如果已经断开连接的话,这里会变成重新连接。

这个就是整个程序的介绍了。


接下来是手机遥控端,android是2周前发布的版本,功能不多但也ok,软件界面和你电脑上看的一模一样。然后手机上面有12个按钮。最上面有3个按钮,一个是全网发送,当就你一个人用这个客户端的时候,懒得再最右边的框框输入识别号的时候,用的。
中间的断开连接重新连接是废的。要重新连接就关程序删后台重开。

iOS的iOS上自己看吧。。和这个差不多
iOS就高级一点,建议iPhone5 其他没测试过。需要越狱,或者跟我拿邀请码就可以不越狱,总而言之都挺麻烦 还是越狱吧。
用法和android一样,只是多了个信息回馈框,你可以通过左边的三角形打开应用菜单,点击中间的Application然后打开AConnectRemote(没有2)就可以看到android的那个版本。iOS的这个版本是我拿来应付老师的一个只能空调系统,没啥用。

然后软件目前不够智能,他只发送command1 到command12这12个字符串无论发回来还是发过去我都会增加一个$符号作为电脑和单片机识别语句。因此大家要调试或者直接使用作为测试的话可以考虑用.



单片机代码部分:
Arduino部分。

String incomingString="";
char breakChar='$';
char incomingByte;
void loop()
{
if(Serial.available()>0){
    for(int ai=0;Serial.available();ai++){      
    incomingByte=char(Serial.read());
    if(incomingByte==breakChar){
    //Here puts your code 这里放你要识别的String内容
      Serial.print("{received:");
      Serial.print(incomingString);
      Serial.print('}');
      Serial.print(breakChar);
      //这里只是将收到的内容按照 json格式发回到电脑而已。
      incomingString="";
      }else{
      incomingString +=incomingByte;
      }
      }
       }
      //....这里是你其他代码   上面只负责把所有收到的文字根据$分开,处理而已。
}

要人命的STC51部分:
首先用串口要用到中断,STC51的串口中断在中断5,然后就是根据command1到12处理。。

#include"string.h"
char GetC;
char commandWord;
void Uart() interrupt 4 using 1
{
           if (RI)
    {
      RI = 0;               //清除RI位
      GetC = SBUF;            //P0显示串口数据
                if(SBUF=='$'){                
                if(!(strcmp(commandWord,"command1"))){
               P00=!P00;
                }
                if(!(strcmp(commandWord,"command2"))){
               P01=!P01;
                }
                if(!(strcmp(commandWord,"command3"))){
               P02=!P02;
                }               
                if(!(strcmp(commandWord,"command4"))){
               P03=!P03;
                }               
                if(!(strcmp(commandWord,"command5"))){
               P04=!P04;
                }               
                if(!(strcmp(commandWord,"command6"))){
               P05=!P05;
                }               
                if(!(strcmp(commandWord,"command7"))){
               P06=!P06;
                }               
                if(!(strcmp(commandWord,"command8"))){
               P07=!P07;
                }
               
                memset(commandWord,0,30);
                }else{
                memset(commandWord+strlen(commandWord),GetC,1) ;

                //strcat(commandWord,GetC);
       }
    }
    if (TI)
    {
      TI = 0;               //清除TI位
      busy = 0;               //清忙标志
    }
}
STC51部分演示视频:
http://v.youku.com/v_show/id_XNTc1NDI2NDIw.html


整套程序打包下载地址:http://pan.baidu.com/share/link?shareid=1865421486&uk=2902866394

yimenwang 发表于 2013-7-3 16:42:20

高手在民间!!!:lol:lol:lol

ro0t 发表于 2013-7-4 07:58:48

真心看不懂。。。

lizeqiangd 发表于 2013-7-5 00:48:47

ro0t 发表于 2013-7-4 07:58 static/image/common/back.gif
真心看不懂。。。

只需要下载 帖子下面的百度盘上面的文件就可以使用了你有arduino和一台电脑和一个android或者ios设备 就可以尝试使用了

lizeqiangd 发表于 2013-7-5 20:14:34

简直伤心~没人回。。惨惨惨明明超有趣。几个程序下来。你手机就可以在全球任何联网地方和你的单片机进行通信。开关灯什么的一切都可以做到。。惨惨惨

qptimus 发表于 2013-7-6 11:50:10

和我一样的手机:lol
页: [1]
查看完整版本: Android和iOS与Arduino或STC51通信方案