查看: 6825|回复: 8

用Arduino使用esp8266的Wi-Fi TCP透传和POST请求

[复制链接]
  • TA的每日心情

    2017-9-1 00:12
  • 签到天数: 65 天

    [LV.6]常住居民II

    发表于 2017-9-20 10:19 | 显示全部楼层 |阅读模式
    用过Arduino的朋友,用esp8266的时候,会比较倾向于使用纯ArduinoIDE的esp8266单个板子的开发,毕竟简单,而且库文件的用法比较熟悉,但是这种也会出现很多问题,比如有些引脚不够用,有些库还没完全移植到esp8266的Arduino版上,甚至性能不够用的情况。
    这时候最好的方案就是让esp8266只做Wi-Fi的事情,Arduino板子来做其他的收集数据,运算之类的事情,相得益彰,相辅相成。


    使用透传一般需要用AT指令来控制esp8266,AT指令第一次用会不理解,会了之后会觉得很简单,稍微有些坑,我也被卡住了挺久。

    相关的文档资料可以在乐鑫官网下载到http://espressif.com/zh-hans/products/hardware/esp8266ex/resources

    这篇帖子就说一下连接服务器并发送post请求的例子。

    kittenblock中小学创客名师推荐的图形化编程软件

    #include <SoftwareSerial.h>
    
    SoftwareSerial mySerial(13, 12); // RX, TX  通过软串口连接esp8266
    
    void setup() {
      // Open serial communications and wait for port to open:
      Serial.begin(115200);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }
    
      mySerial.begin(115200);
      mySerial.println("AT+RST");   // 初始化重启一次esp8266
      delay(1500);
      echo();
      mySerial.println("AT");
      echo();
      delay(500);
      mySerial.println("AT+CWMODE=3");  // 设置Wi-Fi模式
      echo();
      mySerial.println("AT+CWJAP=\"WiFiSSID\",\"password\"");  // 连接Wi-Fi
      echo();
      delay(10000);
    }
    
    void loop() {
    
      if (mySerial.available()) {
        Serial.write(mySerial.read());
      }
      if (Serial.available()) {
        mySerial.write(Serial.read());
      }
      post();
    }
    
    void echo(){
      delay(50);
      while (mySerial.available()) {
        Serial.write(mySerial.read());
      }
    }
    
    void post(){
      String temp = "POST data";
      mySerial.println("AT+CIPMODE=1");
      echo();
      mySerial.println("AT+CIPSTART=\"TCP\",\"webserver.com\",80");  // 连接服务器的80端口
      delay(1000);
      echo();
      mySerial.println("AT+CIPSEND"); // 进入TCP透传模式,接下来发送的所有消息都会发送给服务器
      echo();
      mySerial.print("POST /update.php?params=sth"); // 开始发送post请求
      mySerial.print(" HTTP/1.1\r\nHost: webserver.com\r\nUser-Agent: arduino-ethernet\r\nConnection:close\r\nContent-Length:"); // post请求的报文格式
      mySerial.print(temp.length()); // 需要计算post请求的数据长度
      mySerial.print("\r\n\r\n"); 
      mySerial.println(temp); // 结束post请求
      delay(3000);
      echo();
      mySerial.print("+++"); // 退出tcp透传模式,用println会出错
      delay(2000);
    }
    



    脱单缺基金_(xз」∠)_

    1人打赏

    该用户从未签到

    发表于 2017-10-23 17:32 | 显示全部楼层
    esp 性能 绝对没问题,8266自己 担当 开发板 足够
  • TA的每日心情

    2017-9-1 00:12
  • 签到天数: 65 天

    [LV.6]常住居民II

     楼主| 发表于 2017-11-1 18:53 | 显示全部楼层
    parv 发表于 2017-10-23 17:32
    esp 性能 绝对没问题,8266自己 担当 开发板 足够

    IO口有时候会不够用,有些库在esp上不能用,那就需要用一个Arduino来做主控了
    脱单缺基金_(xз」∠)_
  • TA的每日心情

    2018-11-5 22:00
  • 签到天数: 33 天

    [LV.5]常住居民I

    发表于 2018-4-3 23:25 | 显示全部楼层
    助人为快乐之本~有恒为成功之本~
    打赏作者鼓励一下!

    该用户从未签到

    发表于 2018-8-13 22:50 | 显示全部楼层
    请问按照你的代码使用以后,串口输出的内容有部分是乱码,请问是为什么呢?
    部分输出如下
    AT+RST


    OK
    CLOSDD

    ets J`n  8 2013,r.⸮⸮͕⸮b⸮⸮сj⸮⸮⸮AT⸮CA⸮j⸮L⸮AT+CWMODE<3


    OK
    AT+CWJAP="coolcarrov","12341234nikeasong"

    WIFI CONNECTED
    WIFI GOT IP

    OK
    AT+CIPMODE=1


    OK
    AT+CIPSTAQT="TCP","weaserver.com#,80

    CONOECT
  • TA的每日心情

    2018-9-11 16:18
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2018-8-31 21:33 | 显示全部楼层
    怎么接收post返回的值呢?
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    关于arduino编译问题
    关于arduino编译问题
    编译示例程序老是这个问题,换了电脑都不行
    莫名乱码 —— Arduino+RFID-RC522 读写实验
    莫名乱码 —— Arduino+RF
    目标:想把自己房间门改成感应门锁 器材:Arduino Uno (淘宝七星虫LY-F2)、RFID-RC
    [blinker开发实战2]数据反馈
    [blinker开发实战2]数据反
    [md] ### 添加DIY组件 在编辑模式下,点击按键进入编辑组件页面,可以看到 **按键
    用Arduino控制PS2无线手柄为什么一直连接不上
    用Arduino控制PS2无线手柄
    用Arduino UNO板 连接PS2手柄接收器,为什么指示灯已经显示对接上了,但是打开串口监
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表