使用esp8266 wifi芯片和DFRduino开发板(Arduino也可以),向自己的服务器发送请求(尽可能详细的说明)
研究过嵌入式方面的人都应该了解 esp8266 wifi芯片,前段时间接触一个小竞赛,需要一块传输数据给服务器的模块,毫不犹豫选择了esp8266,可能是自己孤陋寡闻吧... 进入正题
1. 开发环境
Arduino 编写芯片程序需要
eclipse 编写服务端程序
花生壳 内网穿透(不是一定要有的)
2. 硬件连线图
(图片源自网络)
(wifi芯片,AT指令通用的,只是连线不同罢了)
2. 首先在Arduino 开发环境,使用软串口的方式 ,使用单片机和esp8266发送数据 ,代码如下
#include <SoftwareSerial.h>SoftwareSerial mySerial(3, 2); // RX, TXvoid setup() {Serial.begin(9600);while (!Serial) {;}Serial.println("hardware serial!");mySerial.begin(9600);mySerial.println("software seria");}void loop(){if (mySerial.available())Serial.write(mySerial.read());if (Serial.available())mySerial.write(Serial.read());}
这段代码在Arduino 开发环境编写,电脑通过硬串口与单片机发送数据,单片机使用软串口和 esp8266发送数据
Arduino ide下载官网
成功之后,在串口助手中可以发现如下信息
(注意一定要先选中下面的 发送新行!)
3. 通过 AT 指令,设置 esp 8266的wifi源(也就是 这个芯片借用别人的wifi发送消息,就是蹭wifi)
这里先写上几个我在尝试过程中遇到的bug
再输入框里输入 AT+CIOBAUD=9600 回车
有些esp8266芯片的默认波特率可能是 115200 ,这里我们通过这条指令,修改波特率(如图所示)
***********以下命令连接 wifi
注意这些指令也是通过输入框发送给ESP8266的,如图所示
AT+CWMODE=3 // 设置ap+st混合模式AT+RST // 重启一下AT+CWJAP=" SSID "," password " (这里填写你家的,或者学校的 wifi名字 和 密码)
输入一条指令 AT+CWMODE=3
返回 OK
输入AT+RST
返回 OK
我是由于原来就连接过wifi,所以会显示连接完成,WIFI GOT IP
如果是第一次连接 指令 AT+CWJAP=" SSID "," password " 也要输入
-------------------------------------------------------------------------------
(注意接下来的代码完全也可以通过 输入框 发送 AT 指令 但是 我是出于自动化的考虑,写到了代码里面,也就是说通过
AT 指令也可以发送 GET 网络请求)
4. 前面我们通过软串口程序,设置好了wifi, 现在我们在Arduino 开发环境编写代码让 esp8266发送请求,
#include <SoftwareSerial.h>
SoftwareSerial WIFISerial(3, 2); // RX, TX //模拟一个软串口
void setup() {Serial.begin(9600);while (!Serial) {;} //等待串口初始化WIFISerial.begin(9600);delay(1000);WIFISerial.println("AT"); Serial.println("AT"); delay(1000);WIFISerial.println("AT+CIPMUX=0"); //打开单连接 Serial.println("AT+CIPMUX=0"); delay(1000);WIFISerial.println("AT+CIPSTART=\"TCP\",\"19xr3.imwork.net\",29971"); // 这里填写你的域名(主机ip地址 ,127的那个貌似不行),端口号Serial.println("AT+CIPSTART=\"TCP\",\"19xr3.imwork.net\",29971");// 接收数据的计算机地址,连接到 TCP 服务器delay(3000);WIFISerial.println("AT+CIPMODE=1"); //透传模式Serial.println("AT+CIPMODE=1"); //透传模式delay(1000);WIFISerial.println("AT+CIPSEND"); //透传模式Serial.println("AT+CIPSEND"); //透传模式delay(1000);}void loop(){while(WIFISerial.available()){Serial.write(WIFISerial.read());}
//串口打印 软串口读到的每一句话,这里Serial.println("I am ready");Serial.flush();String t = readLine();if(t!=""){WIFISerial.println("GET http://19xr3.imwork.net/a/r/"+t); // 发送一个http请求}delay(2000); //时隔两秒发送下一个请求}
String readLine()
{ String str; while (Serial.available()>0) { char temp = Serial.read(); if (temp != '\n') { str += char(temp); delay(2); }//delete temp;else break;//delete temp; } return str;
}
注意: 以上代码 让wifi芯片发送http请求 ,使用 get 方法,文章最后面给了使用post 方法发送数据的代码。
以上代码需要注意的是
1. 域名可以使用 本机地址,
(这是程序烧写之后,打开串口助手,等待你发送数据)
2. readline 函数 里面的 delay (2) 不可以缺少
3. 注意 代码下划线的使用
4. AT 指令可以在网上找到讲解,这里不多说
5. 如果没有域名 拿主机 ip 地址也可以 命令行 输入 ipconfig,用 ipv4 地址替换代码中的域名
但是要注意!!!! 我代码中有下划线的地方一个不能少,之前因为这个吃了好多亏
WIFISerial.println("AT+CIPSTART=\"TCP\",\"19xr3.imwork.net\",29971");
这个不能少!
WIFISerial.println("GET http://19xr3.imwork.net/a/r/"+t); // 发送一个http请求
这里 a/r/ 这个下划线一定要有 , a 和 r 只是服务器的路径罢了。
5. 服务端 我是使用eclipse+ jfinal 编写的代码
本质就是 把地址后面的参数输出到控制台 程序使用普通的 jsp+servlet 也可以实现
http://www.baidu.com/parameter_and_value
启动服务器,然后打开串口助手
前面几行是程序的输出信息,然后不断出现 I am ready 可以发送数据了 在下面输入 任意字符串
在服务端会有显示,如图。
除此之外,你们看我的服务器代码 有一段 renderText("This is restore method ")
这句话在串口助手中也可以找到
这里我们发送信息的方式是 通过地址的参数发送信息,也就类似与 访问 http://www.baidu.com/hello
我们也可以使用post 发送信息
代码仅供参考
#include <ArduinoJson.h>#include <SoftwareSerial.h>
SoftwareSerial WIFISerial(3, 2); // RX, TX //模拟一个软串口
void setup() {Serial.begin(9600);while (!Serial) {;} WIFISerial.begin(9600);delay(1000);WIFISerial.println("AT"); Serial.println("AT"); delay(1000);WIFISerial.println("AT+CIPMUX=0"); //打开单连接 Serial.println("AT+CIPMUX=0"); delay(1000);WIFISerial.println("AT+CIPSTART=\"TCP\",\"19xr3.imwork.net\",29971");Serial.println("AT+CIPSTART=\"TCP\",\"19xr3.imwork.net\",29971");// 接收数据的计算机地址,连接到 TCP 服务器delay(3000);WIFISerial.println("AT+CIPMODE=1"); //透传模式Serial.println("AT+CIPMODE=1"); //透传模式delay(1000);WIFISerial.println("AT+CIPSEND"); //透传模式Serial.println("AT+CIPSEND"); //透传模式delay(1000);}void loop(){while(WIFISerial.available()){Serial.write(WIFISerial.read());}Serial.println("I am ready");Serial.flush();String t = readLine();if(t!=""){String data = (String)"{\"heartbeat\":\"" + t+"\"}"; int length = data.length(); String postRequest =(String)("POST ") + "/ HTTP/1.1\r\n" + "Content-Type: application/json;charset=utf-8\r\n" + "Host: " +"http://19xr3.imwork.net:29971/a/r/"+ ":" + 29971 + "\r\n" + "Content-Length: " + length + "\r\n" + "Connection: Keep Alive\r\n\r\n" + data+"\r\n"; WIFISerial.print(postRequest);}delay(2000);
}String readLine()
{ String str; while (Serial.available()>0) { char temp = Serial.read(); if (temp != '\n') { str += char(temp); delay(2); }//delete temp;else break;//delete temp; } return str;
}
感谢以下博客文章
https://www.sogou.com/link?url=DSOYnZeCC_q8-9mlKJZvMq8q7oefb5diMlByC-y2GDUl8OT6rYpPtg
http://www.windworkshop.cn/?p=1217
http://www.21ic.com/evm/evaluate/MCU/201712/747645_2.htm
https://www.cnblogs.com/ticktack/p/8043344.html
https://www.cnblogs.com/niejunchan/p/5738628.html
使用esp8266 wifi芯片和DFRduino开发板(Arduino也可以),向自己的服务器发送请求(尽可能详细的说明)相关推荐
- 小E开发板wifi音箱一实现PC通过wifi传数据到开发板进行播放
外话:各位手头上没有esp8266的开发板注意了,目前开发快正在进行"免费开发板活动",本人就是在他们那里申请到的开发板,开发快提供的不单单是开发板,还有他们强 ...
- Wio RP2040无线WiFi迷你开发板Arduino IDE开发环境安装与使用基础
Arduino IDE作为一种开源硬件开发软件工具,目前拥有很好的应用生态和众多的用户,本文介绍Wio RP2040无线WiFi迷你开发板Arduino IDE环境安装与设置,并给出采用Arduino ...
- LGT8F328P 开发板arduino环境搭建及中断程序
LGT8F328P 开发板arduino环境搭建: 1. 在官网上下载 Arduino硬件支持包 http://www.lgtic.com/downloads/ Arduino开发平台相关 LGT8F ...
- 为开发板Arduino Mega or Mega 2560编译时出错
问题: 是在Ubuntu上下载了Arduino IDE,然后在运行Arduino示例里面的代码时,发现无法编译,提示错误"as: 未识别的选项 '-mmcu=avr6', exit stat ...
- 芯片-模组-开发板-软件开发包SDK(Software Development Kit)的关系(软件开发人员必须了解的硬件知识)
使用的芯片相同,但不同模组的Flash大小.天线的材质.模组尺寸是不同的.是的,芯片到模组的演变经历了"定制化.专用化"的过程.模组最终会嵌入到电视.电冰箱.空调等不同的产品中去, ...
- 最新瑞芯微四核芯片RK3288开源开发板
RK3288一体机开发主板,采用瑞芯微四核芯片RK3288方案,主频高达1.8GHz.支持常用外接设备,接口丰富.性能稳定.支持多路显示接口:支持双 mipi.LVDS.HDMI.EDP.多种显示输出 ...
- 6713芯片手册_6713-FPGA开发板手册.pdf
6713-FPGA开发板手册 DSP6713-FPGA-USB2.0 高速采集板 用户手册 (Ver2.21) DSP6713-FPGA-USB2.0 高速采集板用户手册 目 录 1.产品简介 3 1 ...
- arduinopn532模块_NFC开发板/nfc芯片标签/PN532开发板/RFID读卡器/NFC模块/Arduino
带40 kB ROM和1 kB RAM的80C51微控制器内核 高度集成的模拟电路,解调和译码响应 输出缓冲驱动器通过非常少量的外部无源器件连接天线 集成了RF场检测器 集成了数据模式检测器 支持IS ...
- 兼容arduino的linux开发板,Arduino的各种常用开发板
Arduino开发板大全,来看看你玩过哪些? 昨天认识了Arduino,今天来看看Arduino的各种常用开发板. 它有各种型号的,如Arduino Uno.Arduino Leonardo.Ardu ...
最新文章
- 字节跳动pest分析_字节跳动小程序分析:前景及优势都是什么?
- ENAS加载自己的数据集之路
- common pool2 mysql_用common-pool自定义资源池
- Docker自学纪实(三)Docker容器数据持久化
- RawCode-本身就是实验性的8位类型
- html5 canvas签字,HTML5 canvas实现电子签名
- nginx 80端口重定向到443端口
- SQL 导出表数据存储过程
- Windows监听进程的两个函数
- 【Oracle】闪回表
- ROS学习(六)—— 理解ROS节点
- java Servlet文件拷贝的模板代码
- Scala For Java的一些参考
- 拓端tecdat|R语言用rle,svm和rpart决策树进行时间序列预测
- close与volume的相关性
- 掌握旋风:SAP成功实施实地指南
- 【贪玩巴斯】带你一起攻克英语语法长难句—— 第六章——英语的特殊结构 ——2022年3月19日-20日
- OPPO技术开放日第六期丨OPPO安全解析“应用与数据安全防护”背后的技术
- hao123站长李兴平的成功史
- (贰)笔记:AUI 中 Tab 的使用及 item 样式与下划线样式的修改
热门文章
- 2022,博士们,又开始晒工资了
- maven的settings配置文件详解
- 如何编写知识竞赛抢答赛规则和流程策划书
- UIApplication(BTGMethodSwizzler) btg_swizzleSendEvent: 崩溃
- 麦克风声源定位原理_基于麦克风阵列的声源定位算法之GCC-PHAT
- 浮躁_se7en3_新浪博客
- 图说区块链 神一样的金融科技与未来社会
- python绘制太阳系模型_用python做一个漂亮的太阳系运动模拟
- bzoj 2121 字符串游戏
- Error:A problem occurred configuring project ‘:app‘. > Failed to find target with hash string ‘andro