esp01s作为ap,收发数据

1.首先要下载ardunio IDE,安装;
2.然后就是接线,由于要下载进去,把gpio0加接地,en脚接3.3,rx接tx,tx接rx,rst脚接3.3,gpio2接3.3;
3.安装开发库,参考这位博主:https://blog.csdn.net/qq_24269643/article/details/87574021
4.tcp的代码

#include <ESP8266WiFi.h>

WiFiServer server(8080);
WiFiClient client;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  
  Serial.begin ( 115200 );
  //Serial.println("");
  // 设置内网
  IPAddress softLocal(192,168,4,1);   // 1 设置内网WIFI IP地址
  IPAddress softGateway(192,168,4,1);
  IPAddress softSubnet(255,255,255,0);
  WiFi.softAPConfig(softLocal, softGateway, softSubnet);
   
  String apName = ("ESP8266_"+(String)ESP.getChipId());  // 2 设置WIFI名称
  const char *softAPName = apName.c_str();
   
  WiFi.softAP(softAPName, "12345678");      // 3创建wifi  名称 +密码 adminadmin
   
  //IPAddress myIP = WiFi.softAPIP();  // 4输出创建的WIFI IP地址
  //Serial.print("AP IP address: ");     
  //Serial.println(myIP);
   
  //Serial.print("softAPName: ");  // 5输出WIFI 名称
  //Serial.println(apName);

  server.begin();
}
  
void loop() {
  client = server.available();
  if (client)
  {
    while (client.connected())
    {
      if(client.available())
      {
        size_t count = client.available();
        uint8_t sbuf[count];
        client.readBytes(sbuf, count);
        Serial.write(sbuf, count);
      } 
      
      if(Serial.available()) 
      {
        size_t count = Serial.available();
        uint8_t sbuf[count];
        Serial.readBytes(sbuf, count);
        client.write(sbuf, count);
      }
      delay(5);
    }
    delay(10);
    client.stop();
  }

  digitalWrite(LED_BUILTIN, LOW);
  delay(250);
  digitalWrite(LED_BUILTIN, HIGH);
  delay(250);
}

程序:在没有连接连上时,led会闪,连上之后就灭了。
5.点击上传,等待完成,之后把gpio0脚悬空,重新上电,就可以用啦。主要是用来把我的小四轴数据传给手机。


凉了一年,又开始搞小四轴了,之前半路吃灰了,上面的tcp通信,实际用的时候,在安卓端和stm32端都出现数据断开了,后面改成udp通信,有一点点改善。stm32接收也要改,之前用的是串口空闲+dma的,老是断开两半过来,,看来还是老实点一个个接。
上个辣鸡四轴的图
在这里插入图片描述
这四轴中间改版了几次,还是有bug,电机的供电走线走细,导致转速一上去就挂,后面用几根线直接连电源口用着先。传感器那里,6050还好能用,bmp280感觉是走线或者画的时候引脚出错了,焊上去一丢丢反应都无有。不说了,先上现在的esp01s的代码,有一点点遗憾,串口和udp那里,之后udp那里有东西收到之后,才能获取到udp的ip和端口,也就是说如果udp那边没收到东西,我串口发东西就不知道发给谁了,,
esp8266开的ap,不知道怎么查连入设备的ip,后面再想想办法。
上代码了

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

WiFiUDP Udp;
char receivebuf[255];
char srBuf[255];
unsigned int localUdpPort = 8860; 

int sLen = 0;
int packetSize = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin ( 115200 );
  //Serial.println("");
  // 设置内网
  IPAddress softLocal(192,168,4,1);   // 1 设置内网WIFI IP地址
  IPAddress softGateway(192,168,4,1);
  IPAddress softSubnet(255,255,255,0);
  WiFi.softAPConfig(softLocal, softGateway, softSubnet);
   
  String apName = ("ESP8266_SZ");  // 2 设置WIFI名称
  const char *softAPName = apName.c_str();
   
  WiFi.softAP(softAPName, "12345678");      // 3创建wifi  名称 +密码 adminadmin

  Udp.begin(localUdpPort);
}

void loop() {
  // put your main code here, to run repeatedly:
  packetSize = Udp.parsePacket();
  if (packetSize) 
  {
    int len = Udp.read(receivebuf, 255);
    if (len > 0) 
    { 
      Serial.write(receivebuf,len);
    }
  }

  sLen = Serial.available();
  if(sLen)
  {
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    while(sLen)
    {
      Serial.read(srBuf,sLen);
      Udp.write(srBuf,sLen);
      delay(1);
      sLen = Serial.available();
    }
    Udp.endPacket();
  } 
}

改进在这里,在网络调试助手测试,之前会分开一段一段发,这样子就连到一起了,只要的想法是,看延时1毫秒后还有无有数据进来,无有就发了。

 sLen = Serial.available();
  if(sLen)
  {
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    while(sLen)
    {
      Serial.read(srBuf,sLen);
      Udp.write(srBuf,sLen);
      delay(1);
      sLen = Serial.available();
    }
    Udp.endPacket();
  } 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值