ESP8266上位机

这个是通过wifi通信的方式,esp8266作为客户端,上位机服务器端用QT平台实现
下位机界面如下:
在这里插入图片描述
通过输入端口号,按下连接按钮监听8080端口,如果有连接则下面显示client的ip地址等信息,连接成功后就可以实现操作了。
实物图片如下:

在这里插入图片描述
这块我本来还想实现传感器等数据的上传,但遇到一个问题,向服务器发送数据的write函数好像在一旦有传感器数据计算就会把这个连接堵住一样,数据不完整,还会使得下位机接收服务器的数据变慢,但是只要测试单个字符比如wirte(‘a’)这样可以不影响,但会出现一个大量数据聚集,就是第一次发一个a,第二次发几十个a,如此循环,我觉得下位机的while循环有问题吧,弄了两天也没找出来原因,我就光控制吧,如果您有建议请赐教哈
下位机代码:




#include <ESP8266WiFi.h>
#include <Servo.h>

//定义Servo对象来控制
Servo myServo; 
//角度存储变量
int pos = 0;  

#define AP_SSID "MERCURY_400F"             //所用WiFi的名字
#define AP_PSW  "12345678"       //所用WiFi的密码
//D5  灯引脚
#define LED 14
//D0 蜂鸣器引脚
#define BUZZER 16
//D1 舵机引脚
#define Sero 5
const uint16_t port = 8080;        //Tcp 服务器的端口
const char * host = "192.168.0.103"; //Tcp 服务器的ip地址
static String val = "";
WiFiClient client;                 //创建一个tcp client连接

void setup() {
    //舵机初始化
    myServo.attach(Sero); 
    //灯初始化
    pinMode(LED,OUTPUT);
    digitalWrite(LED,0);
    //蜂鸣器初始化
    pinMode(BUZZER,OUTPUT);
    digitalWrite(BUZZER,1);
    
    
    Serial.begin(115200);
    delay(1000);
    WiFi.mode(WIFI_STA);              //设置WiFi 为 Station 模式
    WiFi.begin(AP_SSID,AP_PSW);       //连接WiFi
    Serial.println("Connecting to WiFi... ");
    //等待wifi连接成功
    while (WiFi.status() != WL_CONNECTED) {
        Serial.println("Failed!");
        delay(500);
    }
    Serial.println("");
    Serial.println("Connected");
    Serial.println("Local IP: ");
    Serial.println(WiFi.localIP());
    Serial.println("Connecting to TCP Server :");
    Serial.println(host);
    if (!client.connect(host, port)) {
        Serial.println("Failed");
        return;
    }
}


void ActiveP(){
    for (pos = 0; pos <= 360; pos ++) { // 0°到180°
        // in steps of 1 degree
        myServo.write(pos);              // 舵机角度写入
    }
}

void ActiveD(){
    for (pos = 360; pos >= 0; pos --) { // 从180°到0°
        myServo.write(pos);              // 舵机角度写入
    }
}
void loop(){
    while (client.available()){  
        while (client.available() > 0) // 串口收到字符数大于零。
        {
            val += char(client.read());
        }
        if(val=="12"){
            digitalWrite(LED,1);
        }else if(val=="13"){
            digitalWrite(LED,0);
        }else if(val=="14"){
            digitalWrite(BUZZER,0);
        }else if(val=="15"){
            digitalWrite(BUZZER,1);
        }else if(val=="16"){
            ActiveP();
        }else if(val=="17"){
            ActiveD();
        }
        val="";//清空数据
    } 
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值