微信小程序与NodeMCU通信,以机械手控制为例

一、前言

  • 效果展示
    效果展示

  • 本文章主要讲述微信小程序与物联网开发板NodeMCU在局域网下进行通信,使用的通信协议为WebSocket协议。

  • 在本文中,以微信小程序控制舵机为例,演示通信过程。

  • 具体原理:在NodeMCU里创建WebSocket服务,微信小程序通过APIwx.connectSocket(Object object)连接到机械手的WebSocket服务,之后便可通过APISocketTask.send(Object object)对机械手发送信息,机械手通过判断微信小程序发送的过来的信息,对舵机执行相应操作。

#二、准备事项

1、硬件准备:
  • NodeMCU开发板 1 块
  • 机械手支架 1 个
  • 舵机 3 个
  • 电源模块1个(能够输出5v即可)
  • 杜邦线若干
2、软件准备:
2.1、下载安装微信开发者工具
2.2、下载安装Arduino并添加ESP8266开发板库(可观看作者的另一篇教程,链接如下)
2.3、下载第三方库WebSocketsServer.h,链接如下
  • 链接:https://pan.baidu.com/s/1FbO9m4wS2MQ-Pat9OBOsyA 提取码:4xs6

  • 第三方库下载完成之后将其解压,然后放置在项目文件夹路径下

  • 项目文件夹路径查看方式如下

  • 打开Arduino IDE → 点击文件 → 首选项
    项目文件夹路径

  • 将下载的库放置在该路径下的libraries文件夹里
    第三方库放置位置


#三、模块介绍

  • NodeMCU是一款基于ESP8266芯片的物联网开发板,价格便宜,开发简单。
    NodeMCU开发板外观

  • 三自由度的机械手支架,某宝上买的,各关节上面安装的是舵机。
    机械手支架

  • 舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。舵机有三根线,分别为VCC(红色)、GND(棕色)和信号线(黄色)
    舵机外观

  • 因为上述舵机需要用5v电源驱动,NodeMCU自身不足以驱动3个舵机,所以需要外接电源,只要能输出5v就行。本款电源模块是输入12v,输出5v,也是某宝上买的。
    电源模块


四、接线

1、分别将3个舵机的红线(VD)接到电源模块的5v接口,棕线(GND)接到电源模块的GND接口。
2、将电源模块的GND与NodeMCU的GND相连。
3、将舵机的黄线接到NodeMCU的PWM(模拟信号)口,本文中选用2、4、5口作为舵机的控制IO口。

五、代码编写

1、NodeMCU
1.1、开发板选择,如图所示

开发板选择

1.2、具体代码
#include <ESP8266WiFi.h>
#include <WebSocketsServer.h>
#include <ESP8266mDNS.h>
#include <Servo.h>

#define H_MIN_DEG 0     // 水平舵机的最小角度
#define H_MAX_DEG 180   // 水平舵机的最大角度
#define V_MIN_DEG 70    // 垂直舵机的最小角度
#define V_MAX_DEG 155   // 垂直舵机的最大角度
#define G_MIN_DEG 60    // 机械爪的最小角度
#define G_MAX_DEG 135   // 机械爪的最大角度
#define H_INIT_DEG 90   // 水平舵机的初始角度
#define V_INIT_DEG 100  // 垂直舵机的初始角度
#define G_INIT_DEG 60   // 机械爪的初始角度
#define WEB_SOCKET_POST 80            // webSocket服务端口
#define MDNS_SERVICE_NAME "gripper"   // MDNS服务名称
#define MDNS_SERVICE_TYPE "tcp"       // MDNS服务类型

Servo horizontal;   // 水平舵机
Servo vertical;     // 垂直舵机
Servo gripper;      // 机械爪

WebSocketsServer webSocket = WebSocketsServer(WEB_SOCKET_POST); //创建webSocket服务

void setup(void) {
   
  //  初始化舵机
  servoInit();
  //  初始化串口,设置波特率为9600
  Serial.begin(9600);
  //  一键配网
  smartConfig();

  //  设置MDNS域名服务
  if (MDNS.begin("esp8266")) {
   
    Serial.println("MDNS服务开始!");
  }
  // 注册MDNS服务
  if(MDNS.addService(MDNS_SERVICE_NAME,MDNS_SERVICE_TYPE,80)) {
   
    Serial.println("MDNS服务注册成功!");
  }
  webSocket.begin();
  // 注册webSocket服务的回调函数
  webSocket.onEvent(webSocketEvent);
  Serial.println("webSocket服务开始");
}

void loop(void) {
   
  MDNS.update();
  webSocket.loop();
}

// 一键配网
void smartConfig()
{
   
  WiFi.begin();
  for (int i = 0; i < 3; i++)
  {
   
    if (WiFi.status() == WL_CONNECTED)
    {
   
      Serial.println("AutoConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      delay(1000);
      Serial.println(WiFi.localIP());
      //WiFi.printDiag(Serial); //打印关键的Wi-Fi诊断信息,信息比较多
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值