硬件环境:Mac,ArduinoIDE,ESP8266-01模块,ESP8266烧写器。
软件环境:arduino-1.8.12-macosx。
前文参考:http://www.gaohaiyan.com/2601.html 。
准备一个sqlite3数据库test.db,其中1个表。
user表:_id主键、user用户名、pswd密码,
这里使用php做一个简单的服务端test.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
/** * 可以使用本地的apache服务器, * 或者公网如日阿里云服务器、php空间 */ <?php header("Content-Type: text/html; charset=utf-8"); $errormessage = "非法用户"; // 错误信息 $loginName = "err_user"; // 登录用户 $loginPswd = "err_pswd"; // 登录密码 if ($_SERVER["REQUEST_METHOD"] == "POST") { // post请求 $loginName = $_POST["name"]; $loginPswd = $_POST["pswd"]; } else if ($_SERVER["REQUEST_METHOD"] == "GET") { // get请求 $loginName = $_GET["name"]; $loginPswd = $_GET["pswd"]; } else { echo "建议使用POST方式请求"; return; } class SQLite3Manager extends SQLite3 { public function __construct() { $this->open("./test.db"); // 连接sqlite3数据库 } } $db = new SQLite3Manager(); if (!$db) { $errormessage = lastErrorMsg(); echo "err:数据库错误:" . lastErrorMsg(); return; } $sql = "select * from user"; // 查询用户表 $uid = -1; $haveUser = false; $elements = $db->query($sql); while ($row = $elements->fetchArray(SQLITE3_ASSOC)) { // 遍历已有用户 $userName = $row["user"]; $userPswd = $row["pswd"]; $rname = strcmp($userName, $loginName); // 字符串相同则返回0,否则返回大于或小于0 $rpswd = strcmp($userPswd, $loginPswd); $booleanName = (0 === $rname); // 值为0时返回1,表示true。否则返回空 $booleanPswd = (0 === $rpswd); if ($booleanName and $booleanPswd) { // 用户匹配成功 $uid = $row["_id"]; // 保存登录用户的id $haveUser = true; // 有此用户 break; // 结束遍历 } // 判断下一个用户 } if ($haveUser) { echo "登录成功,你的账号是:" . $loginName . "。\r\n"; } else { // todo 插入用户,并进行后续操作 echo "err:无此用户" . $loginName . "。\r\n"; } $db->close(); ?> |
如前文代码。GET请求将数据加在url之后,POST将数据放在请求头中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
/** 此代码烧录在esp8266模块中 */ #include <ESP8266WiFi.h> const char *ssid = "Wifi热点"; const char *pswd = "wifi密码"; const char *host = "php接口服务器"; const int port = 端口; void setup(void) { Serial.begin(115200); // WiFi.mode(WIFI_AP); // 设置模块作为服务端模式,类似无线路由器,发送热点供其它设备连接 WiFi.mode(WIFI_STA); // 设置模块作为客户端模式,类似普通网卡,连接wifi热点 WiFi.begin(ssid, pswd); // 连接某个热点 while (WiFi.status() != WL_CONNECTED) { // 判断连接成功 delay(500); Serial.print("."); } Serial.println(""); Serial.print("连接到热点:"); Serial.println(ssid); Serial.print("本地IP: "); Serial.println(WiFi.localIP()); Serial.println(); Serial.println(); } void loop(void) { WiFiClient client; while (!client.connect(host, port)) { // 连接服务器 Serial.println("连接服务端失败"); delay(100); } Serial.print("连接到服务端:"); Serial.println(host); String args = "name=威格灵博客&pswd=123456"; // String request = String("GET ") + "/接口路径/test.php?" + args + "/ HTTP/1.1\r\n" + // 接口 // "Content-Type: text/html;charset=utf-8\r\n" + // "Host: " + host + ":" + port + "\r\n" + // 主机+端口 // "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36\r\n" + // "Connection: Keep Alive\r\n"; // 参数结尾是 \r\n // client.println(request); // 访问接口。这里使用的是println即数据末尾再加 \r\n String request = String("POST ") + "/接口路径/test.php" + "/ HTTP/1.1\r\n" + // 接口 "Content-Type: application/x-www-form-urlencoded;\r\n" + // 配合php后台,form格式数据 "Host: " + host + ":" + httpPort + "\r\n" + // 主机+端口 "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36\r\n" + "Content-Length: " + args.length() + "\r\n" + // 数据长度 "Connection: close\r\n\r\n" + // 避免占用过多资源 args + "\r\n"; // 数据体 client.println(request); // println delay(100); String result = ""; while (client.connected() || client.available()) { // 接口响应 String line = client.readStringUntil('\n'); // 返回的某一行数据 line.trim(); if (line.length() > 0) { result += line + "\r\n"; } } client.stop(); // 断开连接 Serial.println("服务端返回:" + result); delay(10000); // 毫秒 } |
-end
声明
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/2606.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设