代码解释(结尾有完整代码)

巴法云私钥及主题

String UID = "9XXX24844f759f7b134a9XXXXXXXXXXX";  //用户私钥,可在控制台获取,修改为自己的UID
String TOPIC4 = "lghz001";   //主题名字,可在控制台新

控制角度设置

void openlock() {mySerial.print("a");delay(50);//  Serial.println("openlock");servo.attach(servoPin);servo.write(90);//控制角度90度delay(2500);servo.write(0);delay(1500);servo.detach();mySerial.print("b");
}

卡号读取并写入程序内

void check(String temphex)
{//  Serial.println("check");if (temphex == "310XXXX"){//    Serial.println(temphex);灏的公交卡openlock();}

步骤1

:注册巴法云获取私钥及主题名
新建TCP主题,名称结尾001
可修改昵称

步骤2

:米家其他平台添加巴法云

步骤3

烧录程序,接好线
跟你的小爱同学说声开门就可以
接线看以下文章http://t.csdn.cn/qlE4t

这里是引用添加链接描述

步骤4(该步骤后期出教程)

通过AppInventor制作软件,可实现手机app控制舵机

代码

#include <ESP8266WiFi.h>
#define server_ip "bemfa.com" //巴法云服务器地址默认即可
#define server_port "8344" //服务器端口,tcp创客云端口8344//********************需要修改的部分*******************//#define wifi_name  "526"                           //WIFI名称,区分大小写,不要写错
#define wifi_password   "qing1471815xxxx."        //WIFI密码#include <SPI.h>
#include <Servo.h>
#include <SoftwareSerial.h>
//手动安装
#include <MFRC522.h>#define RST_PIN         5           // 配置针脚
#define SS_PIN          4
#define TOUCH_SIG D8SoftwareSerial mySerial(D0, D3);
MFRC522 mfrc522(SS_PIN, RST_PIN);   // 创建新的RFID实例
MFRC522::MIFARE_Key key;
Servo servo;unsigned long previousMillis = 0; //毫秒时间记录
int servoPin = 2;//D4String UID = "9XXX24844f759f7b134a9XXXXXXXXXXX";  //用户私钥,可在控制台获取,修改为自己的UID
String TOPIC4 = "lghz001";   //主题名字,可在控制台新建///
//**************************************************//
//最大字节数
#define MAX_PACKETSIZE 512
//设置心跳值60s
#define KEEPALIVEATIME 60*1000
//tcp客户端相关初始化,默认即可
WiFiClient TCPclient;
String TcpClient_Buff = "";//初始化字符串,用于接收服务器发来的数据
unsigned int TcpClient_BuffIndex = 0;
unsigned long TcpClient_preTick = 0;
unsigned long preHeartTick = 0;//心跳
unsigned long preTCPStartTick = 0;//连接
bool preTCPConnected = false;
//相关函数初始化
//连接WIFI
void doWiFiTick();
void startSTA();//TCP初始化连接
void doTCPClientTick();
void startTCPClient();
void sendtoTCPServer(String p);//led控制函数,具体函数内容见下方/**发送数据到TCP服务器*/
void sendtoTCPServer(String p){if (!TCPclient.connected()) {Serial.println("Client is not readly");return;}TCPclient.print(p);
}/**初始化和服务器建立连接
*/
void startTCPClient(){if(TCPclient.connect(server_ip, atoi(server_port))){Serial.print("\nConnected to server:");Serial.printf("%s:%d\r\n",server_ip,atoi(server_port));String tcpTemp="";  //初始化字符串tcpTemp = "cmd=1&uid="+UID+"&topic="+TOPIC4+"\r\n"; //构建订阅总指令///sendtoTCPServer(tcpTemp); //发送订阅指令tcpTemp="";//清空   preTCPConnected = true;preHeartTick = millis();TCPclient.setNoDelay(true);}else{Serial.print("Failed connected to server:");Serial.println(server_ip);TCPclient.stop();preTCPConnected = false;}preTCPStartTick = millis();
}/**检查数据,发送心跳
*/
void doTCPClientTick(){//检查是否断开,断开后重连if(WiFi.status() != WL_CONNECTED) return;if (!TCPclient.connected()) {//断开重连if(preTCPConnected == true){preTCPConnected = false;preTCPStartTick = millis();Serial.println();Serial.println("TCP Client disconnected.");TCPclient.stop();}else if(millis() - preTCPStartTick > 1*1000)//重新连接startTCPClient();}else{if (TCPclient.available()) {/收数据char c =TCPclient.read();TcpClient_Buff +=c;TcpClient_BuffIndex++;TcpClient_preTick = millis();if(TcpClient_BuffIndex>=MAX_PACKETSIZE - 1){TcpClient_BuffIndex = MAX_PACKETSIZE-2;TcpClient_preTick = TcpClient_preTick - 200;}preHeartTick = millis();}if(millis() - preHeartTick >= KEEPALIVEATIME){//保持心跳preHeartTick = millis();Serial.println("--Keep alive:");sendtoTCPServer("ping\r\n"); //发送心跳,指令需\r\n结尾,详见接入文档介绍}}if((TcpClient_Buff.length() >= 1) && (millis() - TcpClient_preTick>=200)){TCPclient.flush();Serial.print("Rev string: ");TcpClient_Buff.trim(); //去掉首位空格Serial.println(TcpClient_Buff); //打印接收到的消息String getTopic = "";String getMsg = "";String getTopic2 = "";String getMsg2 = "";if(TcpClient_Buff.length() > 15){                                    //注意TcpClient_Buff只是个字符串,在上面开头做了初始化 String TcpClient_Buff = "";//此时会收到推送的指令,指令大概为 cmd=2&uid=xxx&topic=light002&msg=offint topicIndex = TcpClient_Buff.indexOf("&topic=")+7;              //c语言字符串查找,查找&topic=位置,并移动7位,不懂的可百度c语言字符串查找int msgIndex = TcpClient_Buff.indexOf("&msg=");                   //c语言字符串查找,查找&msg=位置 getTopic = TcpClient_Buff.substring(topicIndex,msgIndex);          //c语言字符串截取,截取到topic,不懂的可百度c语言字符串截取getMsg = TcpClient_Buff.substring(msgIndex+5);                     //c语言字符串截取,截取到消息Serial.print("topic:------");Serial.println(getTopic); //打印截取到的主题值Serial.print("msg:--------");Serial.println(getMsg);   //打印截取到的消息值}if(getTopic=="lghz001"&&getMsg  == "on"){       //如果是消息==打开openlock2();system_restart(); //系统重新复位}else if(getTopic=="lghz001"&&getMsg == "off"){ //如果是消息==关闭}TcpClient_Buff="";TcpClient_BuffIndex = 0;}
}
/**初始化wifi连接
*/
void startSTA(){WiFi.disconnect();WiFi.mode(WIFI_STA);WiFi.begin(wifi_name, wifi_password);
}
/**************************************************************************WIFI
***************************************************************************/
/*WiFiTick检查是否需要初始化WiFi检查WiFi是否连接上,若连接成功启动TCP Client控制指示灯
*/
void doWiFiTick(){static bool startSTAFlag = false;static bool taskStarted = false;static uint32_t lastWiFiCheckTick = 0;if (!startSTAFlag) {startSTAFlag = true;startSTA();}//未连接1s重连if ( WiFi.status() != WL_CONNECTED ) {if (millis() - lastWiFiCheckTick > 1000) {lastWiFiCheckTick = millis();}}//连接成功建立else {if (taskStarted == false) {taskStarted = true;Serial.print("\r\nGet IP Address: ");Serial.println(WiFi.localIP());startTCPClient();}}
}void rc522() {// 寻找新卡if ( ! mfrc522.PICC_IsNewCardPresent()) {//Serial.println("没有找到卡");return;}// 选择一张卡if ( ! mfrc522.PICC_ReadCardSerial()) {//    Serial.println("没有卡可选");return;}// 显示卡片的详细信息Serial.print("卡片 UID:");dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
}/**将字节数组转储为串行的十六进制值
*/
void dump_byte_array(byte *buffer, byte bufferSize) {String temphex = "";for (byte i = 0; i < bufferSize; i++) {//    Serial.print(buffer[i] < 0x10 ? " 0" : " ");//    Serial.print(buffer[i], HEX);temphex += tohex(buffer[i]);}Serial.println(temphex);delay(100);check(temphex);}
//十进制转十六进制
String tohex(int n) {if (n == 0) {return "00"; //n为0}String result = "";char _16[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};const int radix = 16;while (n) {int i = n % radix;          // 余数result = _16[i] + result;   // 将余数对应的十六进制数字加入结果n /= radix;                 // 除以16获得商,最为下一轮的被除数}if (result.length() < 2) {result = '0' + result; //不足两位补零}return result;
}//获取状态
boolean get_touch() {boolean touch_stat = 0;touch_stat = digitalRead(TOUCH_SIG); //读入状态return touch_stat;
}
void openlock() {mySerial.print("a");delay(50);//  Serial.println("openlock");servo.attach(servoPin);servo.write(90);delay(2500);servo.write(0);delay(1500);servo.detach();mySerial.print("b");
}void openlock2() {mySerial.print("a");delay(50);//  Serial.println("openlock");servo.attach(servoPin);servo.write(90);delay(9500);servo.write(0);delay(1500);servo.detach();mySerial.print("b");
}void check(String temphex)
{//  Serial.println("check");if (temphex == "310XXX"){//    Serial.println(temphex);灏的公交卡openlock();}
else if (temphex == "36D9XXXX"){//    Serial.println(temphex);灏的校园卡openlock();}}else{mySerial.print("d");}}// 初始化,相当于main 函数
void setup() {mySerial.begin(115200);delay(100);SPI.begin();        // SPI开始mfrc522.PCD_Init(); // Init MFRC522 carddelay(100);servo.attach(servoPin);servo.write(0);delay(200);servo.write(0);delay(200);servo.detach();mySerial.print("c");Serial.println("Beginning...");
}//循环
void loop() {doWiFiTick();doTCPClientTick();rc522();
}

【巴法云连接小爱同学+RC522刷卡双控制舵机门锁】相关推荐

  1. STM32--RFID无线射频技术(RC522刷卡模块)

    文章目录 1.RFID的概念 2.RFID的工作原理 (1)RFID中间件的概念 (2)RFID中间件具有以下特点: (3)RFID中间件的意义: 3.RFID频率划分 (1)RFID低频特性 (2) ...

  2. 如何用电脑连接小爱同学蓝牙音箱

    很多朋友问我电脑连接小爱同学后,发现小爱同学没有声,但是蓝牙显示正常连接,今天我为大家出一个详细的教学. 进入小爱同学的蓝牙设置,将蓝牙可被发现打开: 然后打开电脑蓝牙,进行小爱同学蓝牙配对: 点击电 ...

  3. ESP32/ESP8266安装arduino开发板失败的方法(附合宙esp32用blinker固件连接小爱同学提示“要操作的设备好像出问题了等一会再试吧”的解决方法

    如果要挂梯子连GitHub的链接下就太麻烦了 我们直接用中文论坛老哥传好的包 esp32 https://www.arduino.cn/thread-81194-1-1.html esp8266 如果 ...

  4. Win10通过蓝牙连接小爱同学后,小爱同学无法作为音频设备输出声音

    "声音"显示小爱同学已断开连接,但  设置--设备--音频  中显示仍然连接. 1.win+r,输入regedit,打开注册表编辑器 2.进入路径:计算机\HKEY_LOCAL_M ...

  5. pos机 一直连接服务器,pos机刷卡一直在连接中是怎么回事

    原标题:pos机刷卡一直在连接中是怎么回事 pos机刷卡一直在连接中是怎么回事现在小伙伴们使用的机器大多都是无线的机器,那么在使用的过程中肯定也是遇到一些小问题,前几天一个博友提问卡卡哥说机器前几天还 ...

  6. esp8266接入米家、小爱同学,附开源app控制

    超简单,两步完事 第一步 下载程序到esp8266 第二步 绑定到米家 第三步 (附)开源app控制 第一步 下载程序到esp8266 下载地址: 点击下载 本demo 是利用arduino IDE开 ...

  7. 电脑(win10)连接小爱同学音箱

    一共三步操作就OK 1.左下角搜索蓝牙-->选择蓝牙和其他设置 2.打开APP小米AI-->点击个人中心-->选择蓝牙设置开启蓝牙(不要退出) 3.右键桌面右下角的声音图标  --& ...

  8. 8266 + 巴法云 小爱远程控制电脑开关机 arduino

    暂时保存下 还在继续改进准备用小封装的芯片晒笔记本里面去 需求 可能需要在外面远程家里的电脑???没有需求创造需求 然后小爱可以控制电脑开关机 物联网基于 巴法云搭建 (白嫖且没有设备数量的限制)兼容 ...

  9. (含代码)ESP8266+舵机 制作wifi灯控开关(arduino,点灯科技,小爱同学/天猫精灵实现)

    目录 项目涉及的主代码 前言 一.环境搭建 二.开发步骤 1.注册点灯科技平台 2.在点灯科技平台注册设备,获取Secret Key 3.在Arduino IDE中编写代码,写入ESP8266 4.编 ...

最新文章

  1. PHPWAMP集成环境Zend组件的相关介绍,环境默认的PHP运行模式
  2. js mysql 住宿系统_[源码和文档分享]基于JavaScript和MySQL实现的酒店管理系统
  3. Struts快速入门
  4. 跟前腾讯总监学Java实战项目
  5. careercup-高等难度 18.6
  6. DataGridView添加一行数据、全选、取消全选、清空数据、删除选中行
  7. mybatis使用拦截器显示sql,使用druid配置连接信息
  8. RecyclerView混合布局
  9. 安全篇 ━━ ITlearner ASP探针 V1.2
  10. 一只蒟蒻的树形DP学习笔记
  11. 如何使用阿里云搭建个人网站 1
  12. word分栏排版时 插入全页宽的表格
  13. python面试No7
  14. 12个优雅的 python 代码使用案例
  15. 题材丰富 医药板块初露峥嵘
  16. 人行二代征信报告模版_【双12七天价】人行2代征信报告OCR识别API-查询征信报告识别结果【个人信用报告解析】【最新版】_商业智能_OCR_人工智能-云市场-阿里云...
  17. DM365 linux内核文件系统的烧写步骤及其uboot参数配置
  18. 【身份证识别】形态学二代身份证号码识别系统【含GUI源码 948期】
  19. CAE云实证Vol.5:怎么把需要45天的突发性Fluent仿真计算缩短到4天之内?
  20. js判断数组中重复元素并找出_JavaScript判断数组重复内容的两种方法(推荐)

热门文章

  1. 《Effective Objective-C 2.0》读书笔记
  2. 抽象画你是不可能会了 抽象类你还可以争取一下
  3. VUE DIFF算法之双端DIFF
  4. TCPUDP测试工具 1.02 绿色版 - 绿色软件联盟 - 可定时发送数据
  5. 企业网络安全|监控解决方案
  6. linux apache python wsgi,linux下apache2+django+mod_wsgi方式配置web站点
  7. 使用Socks5代理保障Windows网络安全
  8. 白话数字签名(3)——Web程序中的数字签名
  9. JavaFX图片浏览并实现缩放
  10. 微信公众号每日推送给女朋友的程序