极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25676|回复: 5

Android和iOS与Arduino或STC51通信方案

[复制链接]
发表于 2013-7-3 02:39:25 | 显示全部楼层 |阅读模式
本帖最后由 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就代表你成功连接到服务器了。


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

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


本机测试用输入框是本机直接输入一串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部分。

  1. String incomingString="";
  2. char breakChar='$';
  3. char incomingByte;
  4. void loop()
  5. {
  6.   if(Serial.available()>0){
  7.     for(int ai=0;Serial.available();ai++){      
  8.     incomingByte=char(Serial.read());
  9.     if(incomingByte==breakChar){
  10.     //Here puts your code 这里放你要识别的String内容
  11.       Serial.print("{received:");
  12.       Serial.print(incomingString);
  13.       Serial.print('}');
  14.       Serial.print(breakChar);
  15.       //这里只是将收到的内容按照 json格式发回到电脑而已。
  16.       incomingString="";
  17.       }else{
  18.         incomingString +=incomingByte;
  19.         }
  20.       }
  21.        }
  22.       //....这里是你其他代码   上面只负责把所有收到的文字根据$分开,处理而已。
  23. }
复制代码


要人命的STC51部分:
首先用串口要用到中断,STC51的串口中断在中断5,然后就是根据command1到12处理。。
[pre lang="C" line="1"]
#include"string.h"
char GetC;
char commandWord[30];
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;               //清忙标志
    }
}[/code]
STC51部分演示视频:



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-7-3 16:42:20 | 显示全部楼层
高手在民间!!!
回复 支持 反对

使用道具 举报

发表于 2013-7-4 07:58:48 | 显示全部楼层
真心看不懂。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-5 00:48:47 | 显示全部楼层
ro0t 发表于 2013-7-4 07:58
真心看不懂。。。

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

使用道具 举报

 楼主| 发表于 2013-7-5 20:14:34 | 显示全部楼层
简直伤心~没人回。。惨惨惨  明明超有趣。几个程序下来。你手机就可以在全球任何联网地方和你的单片机进行通信。开关灯什么的一切都可以做到。。惨惨惨
回复 支持 反对

使用道具 举报

发表于 2013-7-6 11:50:10 | 显示全部楼层
和我一样的手机
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 07:08 , Processed in 0.064375 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表