之前贪便宜花了19.9买了个这个D1,不过一直没用。最近闲来无事想着拿这个做个东西,发现还不太容易用(主要是被这个名字误导了,其实应该是WEMOS D1),折腾了半天可算折腾完了,记录一下使用过程,省的以后忘了。

1.首先,要认清板子

我买的这个板子长这样,上面的wifi模块是ESP-12F。

2.连接到电脑

我买的是microusb口的,使用一根microusb线连接到电脑就好。

3.CH340驱动安装

首先先不着急安装,直接搜索设备管理器打开,看下端口这款有没有这个CH340,如果有了那就不用安装了。

如果显示的是个感叹号,或者等半天还没自动安装好驱动,那就下载官方驱动,南京沁恒微电子股份有限公司,装上就好了,直到端口变成我图里这样。

4.Arduino ide的设置

这个不需要特别版本的Arduinoide,随便在网上找个下了就行。打开arduino的ide,文件->首选项,把下面这个链接粘贴到附加开发板管理器网址栏里:https://arduino.esp8266/stable/package_esp8266com_index.json。然后点击好。

再点击工具,开发板->开发板管理器,搜8266安装就好了,这里安装可能会提示失败也可能会提很慢,建议拿工具加个速(不方便说,clash v2ray都可以)。

5.下载验证

这是一个灯闪烁的代码,直接复制进去就好。

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);     
}

void loop() {
  digitalWrite(LED_BUILTIN, LOW);   
  delay(200);                     
  digitalWrite(LED_BUILTIN, HIGH);  
  delay(200);                     
}

烧录设置就按我图上这样设置就好,主要是板子选LOLIN(WEMOS)D1 R2这个,然后波特率设置115200就好,端口COMx就按照之前设备管理器里的那个ch340出现的端口。

设置完毕后点击对号旁边的→进行烧录下载。

烧录完毕,ESP12F角上的灯就会开始闪烁。

6. WIFI 测试

文件->示例里的ESP8266例程随便选一个。

烧录下载完毕之后,打开工具->串口监视器,如果输出一堆乱码了不要慌,把串口监视器右下角的波特率设置一下,就会发现窗口里显示出了wifi扫描的结果。

至此,这块板子已经可以根据例程去进行各种开发了。

7.联网使用

7.1 接入家庭网络(Station,STA模式)

这个模式是作为一个物联网设备接入家里的网络使用,例如通过这个板子控制继电器去开关灯。

这里我让8266去连接家里的wifi(直接复制用的话需要改一下ssid和密码,不改的话你也连不到我家的wifi),连接成功后会创建一个udp服务器。

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
 
const char* ssid = "xiaomi4g";
const char* password = "123456789";
WiFiUDP udp;
unsigned int localUdpPort = 4210;  // 本地监听端口
 
void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");
  udp.begin(localUdpPort);
  Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);
}
 
void loop() {
  int packetSize = udp.parsePacket();
  if (packetSize) {
    // 接收数据并处理
    char packetBuffer[255];
    int len = udp.read(packetBuffer, 255);
    if (len > 0) {
      packetBuffer[len] = 0;
    }
    Serial.printf("Received %d bytes from %s, port %d (\"%s\")\n", len, udp.remoteIP().toString().c_str(), udp.remotePort(), packetBuffer);
    String content=String(packetBuffer);
    //Serial.println(content);
    String gowork="666";
    if(content==gowork){
       Serial.println("i want to do something");
       //todo  这里可以控制引脚高电平低电平去控制继电器之类的东西
      }
     else{ Serial.println("nothing to do ");}
  }
}

运行后会显示如下图所示,注意这个192.168.31.114就是esp8266创建的udp服务器地址,监听端口是4210。

然后手机端下载个网络调试助手,然后选择udp客户端,连接这个服务器的ip和端口就行。这个之前说过就不细说了。

发送666 就会执行你想让它干的事。多条指令的话就在代码里多加几个if else好了。

7.2 独立WIFI (Access Point,AP模式)

独立WIFI适用于没有外部网络的情况下,不同设备间进行通信。一般大学生毕设做遥控小车什么的可以用这种模式。在这里我设置了一个Arduino的WiFi,密码是123456789.

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
 
const char* ssid = "Arduino";
const char* password = "123456789";
WiFiUDP udp;
unsigned int localUdpPort = 4210;  // 本地监听端口
 
void setup() {
  Serial.begin(115200);
  // 配置ESP8266为接入点模式
  bool result = WiFi.softAP(ssid, password);
  if(result == true){
    Serial.println("配置为接入点成功");
    IPAddress IP = WiFi.softAPIP();
    Serial.print("AP IP地址:");
    Serial.println(IP);
  } else {
    Serial.println("配置为接入点失败");
  }
  udp.begin(localUdpPort);
  Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);
}
 
void loop() {
  int packetSize = udp.parsePacket();
  if (packetSize) {
    // 接收数据并处理
    char packetBuffer[255];
    int len = udp.read(packetBuffer, 255);
    if (len > 0) {
      packetBuffer[len] = 0;
    }
    Serial.printf("Received %d bytes from %s, port %d (\"%s\")\n", len, udp.remoteIP().toString().c_str(), udp.remotePort(), packetBuffer);
    String content=String(packetBuffer);
    Serial.println(content);
    String gowork="666";
    if(content==gowork){
       Serial.println("i want to do something");
       //todo
      }
     else{ Serial.println("nothing to do ");}
  }
}

运行成功后,会显示下面的界面,显示udp服务器ip为192.168.4.1,监听端口4210.。

然后打开手机就可以看到Arduino这个信号满格的wifi了。连接上之后设置好udp服务的ip与端口就可以正常通信了。

8.接入Blinker(俗称 “上云端”)

8.1 手机blinker

注意免费额度只有1个设备,多个设备上云的可以上官网购买服务(不是广告,我是白嫖党,就是说一下在哪能增加设备。有能力也可以自己买个域名搭个web服务自己建个云,blinker比较适用于大学生做个毕设啥的, 或者自己做个喂猫喂鱼的机器用)。

首先,上点灯科技 (diandeng.tech)这里下载手机blinker应用。点击右上角加号添加设备。选择独立设备。

8.2 Arduino IDE添加blinker的库

还是上点灯科技 (diandeng.tech)这里下载,下载下来应该是个zip包,然后在ArduinoIDE的项目->加载库->添加.ZIP库。

添加完就可以看见例程了。

也可以直接用以下代码,注意要把密钥更改一下,这个相当于你的设备在blinker云端的身份证号。(密钥在你手机端的blinker,左侧有三个横杠,点进去有个设备管理,点到设备之后会显示有个*********的。把那个替换到底下的代码里的auth那)。

还要注意改wifi名,改成你家里的网,这样就能在公司控制你家的设备了。

整体的信息流程就是板子->你家路由器->基站->blinker公司的服务器->基站->你的手机,反过来也一样。

/* *****************************************************************
 *
 * Download latest Blinker library here:
 * https://github/blinker-iot/blinker-library/archive/master.zip
 * 
 * 
 * Blinker is a cross-hardware, cross-platform solution for the IoT. 
 * It provides APP, device and server support, 
 * and uses public cloud services for data transmission and storage.
 * It can be used in smart home, data monitoring and other fields 
 * to help users build Internet of Things projects better and faster.
 * 
 * Make sure installed 2.7.4 or later ESP8266/Arduino package,
 * if use ESP8266 with Blinker.
 * https://github/esp8266/Arduino/releases
 * 
 * Make sure installed 1.0.5 or later ESP32/Arduino package,
 * if use ESP32 with Blinker.
 * https://github/espressif/arduino-esp32/releases
 * 
 * Docs: https://diandeng.tech/doc
 *       
 * 
 * *****************************************************************
 * 
 * Blinker 库下载地址:
 * https://github/blinker-iot/blinker-library/archive/master.zip
 * 
 * Blinker 是一套跨硬件、跨平台的物联网解决方案,提供APP端、设备端、
 * 服务器端支持,使用公有云服务进行数据传输存储。可用于智能家居、
 * 数据监测等领域,可以帮助用户更好更快地搭建物联网项目。
 * 
 * 如果使用 ESP8266 接入 Blinker,
 * 请确保安装了 2.7.4 或更新的 ESP8266/Arduino 支持包。
 * https://github/esp8266/Arduino/releases
 * 
 * 如果使用 ESP32 接入 Blinker,
 * 请确保安装了 1.0.5 或更新的 ESP32/Arduino 支持包。
 * https://github/espressif/arduino-esp32/releases
 * 
 * 文档: https://diandeng.tech/doc
 *       
 * 
 * *****************************************************************/

#define BLINKER_WIFI

#include <Blinker.h>

char auth[] = "xxxxxxx";//替换自己设备的密钥
char ssid[] = "xiaomi4g";
char pswd[] = "123456789";

// 新建组件对象
BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc");

int counter = 0;

// 按下按键即会执行该函数
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}

// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    counter++;
    Number1.print(counter);
}

void setup()
{
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
    
    // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);

    Button1.attach(button1_callback);
}

void loop() {
    Blinker.run();
}

然后在手机端添加个button和number组件,再把名字改成btn-abc,num-abc就好了。代码烧录下载好之后就会发现你的手机里会显示你的设备上线了,你点一下按钮这个板子的灯就会亮灭。