说明:这是一个可远程遥控的小车,只要小车连接上WIFI,理论上无论你在多远的地方都能遥控小车,因为使用了onenet云平台;当然如果小车使用GSM模组就更好了,小车在哪都能受控。 说明:这是基于ESP8266-SDK进行二次开发的,怎么通过MQTT协议连接onenet不在多说,详情请查看我的另一篇博客看ESP8266端开发部分,提供了源代码,当然你也可以去安信可官方平台下载sdk包;在这里主要完成将相应的消息通过串口发送出去。
小车效果
APP效果
设计材料
设计思路
ESP8266端开发
CAR
主题。void mqttConnectedCb(uint32_t *args) { MQTT_Client* client = (MQTT_Client*)args; INFO("MQTT: Connectedrn"); MQTT_Subscribe(client, "CAR", 0);//完成订阅 }
CAR
主题,然后将该主题下的消息通过串口发送出去,比如说收到1
,那么就在新的一行打印1
即可。void mqttDataCb(uint32_t *args, const char* topic, uint32_t topic_len, const char *data, uint32_t data_len) { char *topicBuf = (char*)os_zalloc(topic_len+1), *dataBuf = (char*)os_zalloc(data_len+1); MQTT_Client* client = (MQTT_Client*)args; os_memcpy(topicBuf, topic, topic_len); topicBuf[topic_len] = 0; os_memcpy(dataBuf, data, data_len); dataBuf[data_len] = 0; // INFO("Receive topic: %s, data: %s rn", topicBuf, dataBuf); // INFO("Topic_len = %d, Data_len = %drn", topic_len, data_len);//串口打印主题长度、有效载荷长度 if( os_strcmp(topicBuf,"CAR") == 0 )//判断是哪一个主题 { if( os_strcmp(dataBuf,"0") == 0 ) //如果收到的是0就打印0 { os_printf("0n"); } else if( os_strcmp(dataBuf,"1") == 0 ) { os_printf("1n"); } //此处省略了2,3,4,5的打印代码,可以自行补充。 } os_free(topicBuf); os_free(dataBuf); }
51单片机端开发
#include "reg52.h" #include "intrins.h" typedef unsigned int u16; typedef unsigned char u8; sbit Led=P3^7; sbit JDQ_S=P0^0; sbit JDQ_C=P0^1; sbit turn_left=P1^1; sbit turn_right=P1^2; sbit qianjin=P1^3; sbit houtui=P1^4; u8 receivearray[100]; //串口初始化函数,波特率设置为9600 void UsartInit() { SCON=0x50; PCON=0x80; TMOD=0x21; TH1=0xFA; TL1=TH1; EA=1; ES=1; TR1=1; } //串口发送函数,发送函数第一位为2,esp8266端才会发布消息 void Sent2Esp8266(u8 *p) { while(*p) { SBUF=*p; while(!TI); TI=0; p++; } } //主函数 void main() { UsartInit(); while(1) { } } //串口中断函数,用来读取串口读取到的数据 u8 i=0; void Usart() interrupt 4 { u8 receiveData; receiveData=SBUF; receivearray[i]=receiveData; i++; if(receivearray[i-1]=='n')i=0; switch(receivearray[0]) { case '0': turn_left=1; turn_right=0; Led=1; //Sent2Esp8266("turn_left"); break; case '1': turn_left=0; turn_right=1; Led=0; //Sent2Esp8266("turn_right"); break; case '2': turn_left=0; turn_right=0; //Sent2Esp8266("stop_turn"); break; case '3': qianjin=1; houtui=0; //Sent2Esp8266("qianjin"); break; case '4': qianjin=0; houtui=1; //Sent2Esp8266("houtui"); break; case '5': qianjin=0; houtui=0; //Sent2Esp8266("stop"); break; } RI = 0; SBUF=receiveData; while(!TI); TI=0; }
P1.0,P1.1来控制方方向,当高低电平不同时,电机旋转方向不同,将P1.0接1A,P1.1接2A;1Y、2Y接在电机上
。另一个电机也是一样,4、5、12、13管脚是联通的,将其中的一个接地即可,EN使能端高电平有效,可以给两个使能高电平,VCC1、2接电源正极
。APP端开发
@Override public boolean onTouch(View v, MotionEvent event) { switch (v.getId()){ case R.id.left: if(event.getAction()==MotionEvent.ACTION_DOWN){//如果按键是按下的状态 btn_left.setTextColor(Color.parseColor("#6200EE"));//更改按键颜色 byte[] left={'0'};//左转所要发布的消息 MqttPublish mqttPublish_left=new MqttPublish("CAR",left,QoS.AT_LEAST_ONCE);//这里一CAR主题名发布 MqttClient.getInstance().sendMsg(mqttPublish_left);//发布消息 }else if(event.getAction()==MotionEvent.ACTION_UP){ btn_left.setTextColor(Color.parseColor("#c0c0c0")); byte[] left={'2'}; MqttPublish mqttPublish_zt=new MqttPublish("CAR",left,QoS.AT_LEAST_ONCE); MqttClient.getInstance().sendMsg(mqttPublish_zt); } break; case R.id.right: if(event.getAction()==MotionEvent.ACTION_DOWN){ btn_right.setTextColor(Color.parseColor("#6200EE")); byte[] right={'1'}; MqttPublish mqttPublish_left=new MqttPublish("CAR",right,QoS.AT_LEAST_ONCE); MqttClient.getInstance().sendMsg(mqttPublish_left); }else if(event.getAction()==MotionEvent.ACTION_UP){ btn_right.setTextColor(Color.parseColor("#c0c0c0")); byte[] left={'2'}; MqttPublish mqttPublish_zt=new MqttPublish("CAR",left,QoS.AT_LEAST_ONCE); MqttClient.getInstance().sendMsg(mqttPublish_zt); } break; case R.id.qj: if(event.getAction()==MotionEvent.ACTION_DOWN){ btn_qj.setTextColor(Color.parseColor("#6200EE")); byte[] right={'4'}; MqttPublish mqttPublish_left=new MqttPublish("CAR",right,QoS.AT_LEAST_ONCE); MqttClient.getInstance().sendMsg(mqttPublish_left); }else if(event.getAction()==MotionEvent.ACTION_UP){ btn_qj.setTextColor(Color.parseColor("#c0c0c0")); byte[] left={'5'}; MqttPublish mqttPublish_zt=new MqttPublish("CAR",left,QoS.AT_LEAST_ONCE); MqttClient.getInstance().sendMsg(mqttPublish_zt); } break; case R.id.ht: if(event.getAction()==MotionEvent.ACTION_DOWN){ btn_ht.setTextColor(Color.parseColor("#6200EE")); byte[] right={'3'}; MqttPublish mqttPublish_left=new MqttPublish("CAR",right,QoS.AT_LEAST_ONCE); MqttClient.getInstance().sendMsg(mqttPublish_left); }else if(event.getAction()==MotionEvent.ACTION_UP){ btn_ht.setTextColor(Color.parseColor("#c0c0c0")); byte[] left={'5'}; MqttPublish mqttPublish_zt=new MqttPublish("CAR",left,QoS.AT_LEAST_ONCE); MqttClient.getInstance().sendMsg(mqttPublish_zt); } break; } return true; }
到此就结束喽,有什么问题的话,还请大家指出。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算