|
本帖最后由 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&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部分。 - 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处理。。
[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
|