arduino 串口转网络_arduino开发,arduino串口调试 - CSDN
精华内容
参与话题
  • 网络得到数据--Arduino+以太网

    万次阅读 2013-08-07 16:06:24
    昨天我们讨论了如何使用Arduino以太网插板建立服务器,并通过网络控制Arduino的引脚。今天我们来看看用插板做为客户端来从一个网页上得到信息并返回报告。我几个月前用的这个方法,当时我做了一个Nixie Twitter ...

    ethernet_shield_client

    昨天我们讨论了如何使用Arduino以太网插板建立服务器,并通过网络控制Arduino的引脚。今天我们来看看用插板做为客户端来从一个网页上得到信息并返回报告。我几个月前用的这个方法,当时我做了一个Nixie Twitter follower的计数器被称为Twixie。

    以太网插板可用来访问任何非密码保护的网站,但你要得到信息返回是比较难的一部分。对于Twixie,我创建了一个特殊的php页面,查询twitter API和显示twiter的计数。这让我不必要去告诉Arduino去查找什么,查无数行的HTML寻找一个数字。在我们的示例中会变得更加简单。我创建了一个PHP文件,仅输出一个随机字符串。我这样做是因为要让每个人都设置一个API账户,不需要证明这个概念就可以开始。但是这个想法是,你可以将PHP文件(任何网络可访问文件)编写并显示出你所需要的东西。

    在客户端模式中,以太网插板可以访问网页并将它所读到的信息返回。但是每一次读取一个字节读完整个网页内容。所以它就像大海捞针在大页面上。即使我们正在阅读的页面只包含我们需要的信息,有额外的信息在一开始就被送到arduino。你永远不会看到它,实际上是一个web服务器发送额外的信息作为一个“头”,告诉浏览器有关页面的各种信息(这是不同于HTML标签的)。

    如此,我们需要一种方式来告诉Arduino什么是垃圾,什么是有用的东西。我们可以用<>来包括信息。当Arduino开始读取网页的时候,我们会告诉它忽略所有指导看到"<"。从这点上我们告诉Arduino记录每个下面的字符知道我们看到了结束字符">"。此时,Arduino有所需的一切,断开服务器然后返回报告找到的数据。

    以太网插板库不支持DNS这意味着我们不能直接访问网页,我们需要通过一个IP地址来访问网页。例如,bildr的IP地址是174.123.231.247,你可以访问bildr比如http://174.123.231.247/ ~ bildr / -不是每个服务器允许你这样做,但是通常可以IPADDRESS/~ACCOUNT_USERNAME – 所以你可以看到我在这创建的PHP文件 http://174.123.231.247/~bildr/examples/ethernet/

    arduino-ethernet-client

    代码

    直至Arduino1.0,都支持DHCP,所以可以插入大多数的网络让它工作。

    NOW 1.0 COMPATIBLE

    //ARDUINO 1.0+ ONLY
    //ARDUINO 1.0+ ONLY
    #include <Ethernet.h>
    #include <SPI.h>


    //CONFIGURE

    byte server[] = { 174,123,231,247 }; //ip Address of the server you will connect to

    //The location to go to on the server
    //make sure to keep HTTP/1.0 at the end, this is telling it what type of file it is
    String location = "/~bildr/examples/ethernet/ HTTP/1.0";
    // if need to change the MAC address (Very Rare)
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

    EthernetClient client;

    char inString[32]; // string for incoming serial data
    int stringPos = 0; // string index counter
    boolean startRead = false; // is reading?

    void setup(){
    Ethernet.begin(mac);
    Serial.begin(9600);
    }

    void loop(){
    String pageValue = connectAndRead(); //connect to the server and read the output

    Serial.println(pageValue); //print out the findings.

    delay(5000); //wait 5 seconds before connecting again
    }

    String connectAndRead(){
    //connect to the server

    Serial.println("connecting...");

    //port 80 is typical of a www page
    if (client.connect(server, 80)) {
    Serial.println("connected");
    client.print("GET ");
    client.println(location);
    client.println();

    //Connected - Read the page
    return readPage(); //go and read the output

    }else{
    return "connection failed";
    }

    }

    String readPage(){
    //read the page, and capture & return everything between '<' and '>'

    stringPos = 0;
    memset( &inString, 0, 32 ); //clear inString memory

    while(true){

    if (client.available()) {
    char c = client.read();

    if (c == '<' ) { //'<' is our begining character
    startRead = true; //Ready to start reading the part
    }else if(startRead){

    if(c != '>'){ //'>' is our ending character
    inString[stringPos] = c;
    stringPos ++;
    }else{
    //got what we need here! We can disconnect now
    startRead = false;
    client.stop();
    client.flush();
    Serial.println("disconnecting.");
    return inString;

    }

    }
    }

    }

    }

    PHP例程文件。创建一个随机的字符串比如<1Hc2f>

    <?php
    //the arduino will store anything between '<' and '>'
    //So if the output was <1kjhghk5> - the arduino would read 1kjhghk5
    //Just generates a random alphanumeric string
    $what_the_arduino_reads = '1'.base_convert(rand(10000,9999999), 10, 36);

    echo '<'.$what_the_arduino_reads.'>';
    ?>

    翻译自:http://bildr.org/2011/06/arduino-ethernet-client/

    感谢阅读!

    更多与我们联系:

    WIZnet邮箱:wiznetbj@wiznet.co.kr


    展开全文
  • Arduino以太网插板教程

    万次阅读 2013-05-23 15:05:47
    Arduino以太网插板让你轻松将你的Arduino连接因特网。这个插板可以让Arduino发送和接收来自世界任何角落的数据。你可以用它来做有意思的东西,比如用网站远程控制机器人,或者每次你收到一个新的twitter信息都会响一...

    Arduino插板1

    Arduino以太网插板让你轻松将你的Arduino连接因特网。这个插板可以让Arduino发送和接收来自世界任何角落的数据。你可以用它来做有意思的东西,比如用网站远程控制机器人,或者每次你收到一个新的twitter信息都会响一次铃。这个插板开启了无穷尽的可能性,让你立刻将你的项目介入因特网。

    第一步:安装

    Arduino插板2

    安装很简单,将插板头部的引脚针插入你的Arduino。

    第二步:插板特征

    Arduino插板3

    以太网插板基于W5100芯片(WIZnet),带有一个16K的内部缓冲区。连接速率高达10/100Mb。

    依赖于Arduino以太网库,和开发环境捆绑。

    还有一个板载微型SD卡槽,可以让你存储可查找到的数据。这需要使用外部SD库,它并不附带软件。本教程不涵盖SD卡。在无线SD卡的 Step 8(http://www.instructables.com/id/Arduino-Wireless-SD-Shield-Tutorial/step8/Prepare-the-SD-card/)中可以找到。

    这个板子也有空间增加PoE模块,它可以给Arduino连接以太网供电。

    完整的技术概述,请看官方以太网插板页http://arduino.cc/en/Main/ArduinoEthernetShield

    第三步:启动

    Arduino插板4

    Arduino插板5

    将Arduino与你电脑USB口连接;以太网插板连接路由器(或直接联网)

    接下来,打开Arduino开发环境。我强烈推荐更新Arduino 1.0及以上版本(如果你还没有用过)。这个软件版本支持DHCP,不需要手动配置一个IP地址

    要清楚分配到你板子上的IP地址是多少,打开DhcpAddressPrinter:
    File --> Examples --> Ethernet --> DhcpAddressPrinter

    打开后,你可能需要换个MAC地址。在较新的以太网插板版本,你应该看到板子上贴了个地址标签。如果你弄丢了这个标签,就编个能工作的唯一地址。如果您使用多个插板,要保证MAC地址的唯一性。

    MAC地址配置好后,上传代码到你的Arduino,打开串口监控器。它会打出使用中的IP地址。

    第四步:服务器

    Arduino插板6

    Arduino插板7

    Arduino插板8Arduino插板9

    你可以将Arduino插板用作一个网络服务器,来负载一个HTML页或者聊天服务器功能。你也可以解析请求客户端发送,就像一个网络浏览器。下面的两个例子说明了怎样使用它来负载HTML页,和解析URL字符串。

    重要的是要记住,你需要输入你的Arduino IP地址在下面两个例子中,这样才能工作。

    下面的代码将网页服务改换到基于一个按钮:

    /*   Web Server Demo   thrown together by Randy Sarafan    A simple web server that changes the page that is served, triggered by a button press.    Circuit:  * Ethernet shield attached to pins 10, 11, 12, 13  * Connect a button between Pin D2 and 5V  * Connect a 10K resistor between Pin D2 and ground    Based almost entirely upon Web Server by Tom Igoe and David Mellis    Edit history:  created 18 Dec 2009  by David A. Mellis  modified 4 Sep 2010  by Tom Igoe    */

    #include <SPI.h> #include <Ethernet.h>

    // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 }; IPAddress ip(191,11,1,1); //<<< ENTER YOUR IP ADDRESS HERE!!!

    // Initialize the Ethernet server library // with the IP address and port you want to use // (port 80 is default for HTTP): EthernetServer server(80);

    int buttonPress = 1;

    void setup() {   pinMode(2, INPUT);

    // start the Ethernet connection and the server:   Ethernet.begin(mac, ip);   server.begin(); }

    void loop() {

    buttonPress = digitalRead(2);

    // listen for incoming clients

    EthernetClient client = server.available();

    if (client) {

    // an http request ends with a blank line

    boolean currentLineIsBlank = true;

    while (client.connected()) {

    if (client.available()) {

    char c = client.read();

    // if you've gotten to the end of the line (received a newline character) and the line is blank, the http request has ended,

    // so you can send a reply

    if (c == '\n' && currentLineIsBlank) {

    // send a standard http response header

    client.println("HTTP/1.1 200 OK");

    client.println("Content-Type: text/html");

    client.println();

    //serves a different version of a website depending on whether or not the button

    //connected to pin 2 is pressed.

    if (buttonPress == 1) {

    client.println("<cke:html><cke:body bgcolor=#FFFFFF>LIGHT!</cke:body></cke:html>");

    }

    else if (buttonPress == 0){

    client.println("<cke:html><cke:body bgcolor=#000000 text=#FFFFFF>DARK!  </cke:body></cke:html>");

    }

    break;

    }

    if (c == '\n') {

    // you're starting a new line  currentLineIsBlank = true;

    }

    else if (c != '\r') {

    // you've gotten a character on the current line  currentLineIsBlank = false;

    }

    }

    }

    // give the web browser time to receive the data

    delay(1);

    // close the connection:

    client.stop();

    }

    }

    让这个样例代码工作,附上一个一个按钮在 D2引脚和5V之间,一个10K电阻在 D2引脚与接地之间,然后负载你的ArduinoIP地址到你的网页浏览器。网页应该打开一个黑色的背景。按下这个按钮并保持住,然后刷新页面。这页面将会打开一个白色背景。

    下面的代码在URL上点亮一个LED,并发送到Arduino:

    /*   Web Server Demo   thrown together by Randy Sarafan    Allows you to turn on and off an LED by entering different urls.    To turn it on:  http://your-IP-address/$1    To turn it off:  http://your-IP-address/$2    Circuit:  * Ethernet shield attached to pins 10, 11, 12, 13  * Connect an LED to pin D2 and put it in series with a 220 ohm resistor to ground    Based almost entirely upon Web Server by Tom Igoe and David Mellis    Edit history:  created 18 Dec 2009  by David A. Mellis  modified 4 Sep 2010  by Tom Igoe    */

    #include <SPI.h> #include <Ethernet.h>

    boolean incoming = 0;

    // Enter a MAC address and IP address for your controller below.

    // The IP address will be dependent on your local network: byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 }; IPAddress ip(191,11,1,1);

    //<<< ENTER YOUR IP ADDRESS HERE!!!

    // Initialize the Ethernet server library // with the IP address and port you want to use

    // (port 80 is default for HTTP): EthernetServer server(80);

    void setup() {   pinMode(2, OUTPUT);

    // start the Ethernet connection and the server:

    Ethernet.begin(mac, ip);

    server.begin();

    Serial.begin(9600); }

    void loop() {

    // listen for incoming clients

    EthernetClient client = server.available();

    if (client) {

    // an http request ends with a blank line

    boolean currentLineIsBlank = true;

    while (client.connected()) {

    if (client.available()) {

    char c = client.read();

    // if you've gotten to the end of the line (received a newline character) and the line is blank, the http request has ended,

    // so you can send a reply

    //reads URL string from $ to first blank space

    if(incoming && c == ' '){

    incoming = 0;

    }

    if(c == '$'){

    incoming = 1;

    }

    //Checks for the URL string $1 or $2

    if(incoming == 1){

    Serial.println(c);

    if(c == '1'){

    Serial.println("ON");

    digitalWrite(2, HIGH);

    }

    if(c == '2'){

    Serial.println("OFF");

    digitalWrite(2, LOW);

    }

    }

    if (c == '\n') {

    // you're starting a new line

    currentLineIsBlank = true;

    }

    else if (c != '\r') {

    // you've gotten a character on the current line

    currentLineIsBlank = false;

    }

    }

    }

    // give the web browser time to receive the data

    delay(1);

    // close the connection:

    client.stop();

    }

    }

    将正极引导LED连接到引脚D2,负极连接220欧姆电阻到地。

    打开LED键入这个到你的浏览器:

    http://[YOUR IP ADDRESS HERE]/$1

    关闭LED键入这个到你的浏览器:

    http://[YOUR IP ADDRESS HERE]/$2

    注意:很明显你应该用你的IP地址替换[YOUR IP ADDRESS HERE]

    第五步:客户端

    Arduino插板10

    你也可以使用以太网插板作为一个客户端。换言说,你可以用它像个网页浏览器一个读取网页。

    网页也有可见和隐藏的文本,这样使其在客户端编程变得非常棘手。读网页信息通常涉及到解析很多字符串。这很让人受不了,但是值得的是,如果这正是你想要的。

    我写一些读Twitter信息的代码,但这代码已经作为Arduino编辑器的例子存在了。相反,我只需要稍微修改一下,就可以在信息被读的时候 点亮一个LED灯。

    连接正极引导LED到引脚D2,连接负极引导220欧姆电阻接地。

    不要忘记键入你的IP地址到下面的代码,不然它不会工作的。

    代码如下:

    /*   Twitter Client with Strings    This sketch connects to Twitter using an Ethernet shield. It parses the XML  returned, and looks for <text>this is a tweet</text>    You can use the Arduino Ethernet shield, or the Adafruit Ethernet shield,  either one will work, as long as it's got a Wiznet Ethernet module on board.    This example uses the DHCP routines in the Ethernet library which is part of the  Arduino core from version 1.0 beta 1    This example uses the String library, which is part of the Arduino core from  version 0019.     Circuit:   * Ethernet shield attached to pins 10, 11, 12, 13    created 21 May 2011  by Tom Igoe    This code is in the public domain.    */

    #include <SPI.h> #include <Ethernet.h>

    // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = {   0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 }; IPAddress ip(191,11,1,1);

    //<<< ENTER YOUR IP ADDRESS HERE!!!

    // initialize the library instance: EthernetClient client;

    const int requestInterval = 60000;

    // delay between requests

    char serverName[] = "api.twitter.com";

    // twitter URL

    boolean requested;

    // whether you've made a request since connecting long lastAttemptTime = 0;

    // last time you connected to the server, in milliseconds

    String currentLine = "";

    // string to hold the text from server String tweet = "";

    // string to hold the tweet boolean readingTweet = false;

    // if you're currently reading the tweet

    void setup() {

    pinMode(2, OUTPUT);

    // reserve space for the strings:   currentLine.reserve(256);   tweet.reserve(150);

    // initialize serial:   Serial.begin(9600);

    // attempt a DHCP connection:

    if (!Ethernet.begin(mac)) {

    // if DHCP fails, start with a hard-coded address:

    Ethernet.begin(mac, ip);   }

    // connect to Twitter:   connectToServer(); }

     

    void loop() {

    if (client.connected()) {

    if (client.available()) {

    // read incoming bytes:

    char inChar = client.read();

    // add incoming byte to end of line:

    currentLine += inChar;

    // if you get a newline, clear the line:

    if (inChar == '\n') {

    currentLine = "";       }

    // if the current line ends with <text>, it will

    // be followed by the tweet:

    if ( currentLine.endsWith("<text>")) {

    // tweet is beginning. Clear the tweet string:

    readingTweet = true;

    tweet = "";       }

    // if you're currently reading the bytes of a tweet,

    // add them to the tweet String:

    if (readingTweet) {

    if (inChar != '<') {

    tweet += inChar;

    }

    else {

    // if you got a "<" character,

    // you've reached the end of the tweet:

    readingTweet = false;

    Serial.println(tweet);

    if(tweet == ">Hello Cruel World"){

    digitalWrite(2, HIGH);

    Serial.println("LED ON!");           }

    if(tweet != ">Hello Cruel World"){

    digitalWrite(2, LOW);

    Serial.println("LED OFF!");

    }

    // close the connection to the server:

    client.stop();

    }

    }

    }

    }

    else if (millis() - lastAttemptTime > requestInterval) {

    // if you're not connected, and two minutes have passed since

    // your last connection, then attempt to connect again:

    connectToServer();   } }

    void connectToServer() {

    // attempt to connect, and wait a millisecond:

    Serial.println("connecting to server...");

    if (client.connect(serverName, 80)) {

    Serial.println("making HTTP request...");

    // make HTTP GET request to twitter:

    client.println("GET /1/statuses/user_timeline.xml?screen_name=RandyMcTester&count=1 HTTP/1.1");     client.println("HOST: api.twitter.com");

    client.println();   }

    // note the time of this connect attempt:

    lastAttemptTime = millis();

    }

    也许你想读一些其他最近的帖子在 RandyMcTester Twitter feed
    阅读其他Twitter feed, 改变下面的文本:
    client.println("GET /1/statuses/user_timeline.xml?screen_name=[NEW TWITTER NAME HERE]&count=1 HTTP/1.1");

    翻译自:http://www.instructables.com/id/Arduino-Ethernet-Shield-Tutorial/

     

    感谢您的阅读!欢迎与我们进行更多交流~

     

     

     

    展开全文
  • Arduino使用ESP8266通信的实践

    万次阅读 热门讨论 2018-04-13 09:42:07
    列表内容 一、 背景 nRF24L01的成本较低,但内部需通过SPI通信,略显复杂,同时RF过于专用,接入其他系统时需要转换,不方便。 ESP8266是乐鑫公司推出的廉价、但几乎全能的WIFI芯片,被各种智能硬件广泛使用,...
    • 列表内容

    一、 背景
    nRF24L01的成本较低,但内部需通过SPI通信,略显复杂,同时RF过于专用,接入其他系统时需要转换,不方便。
    ESP8266是乐鑫公司推出的廉价、但几乎全能的WIFI芯片,被各种智能硬件广泛使用,根据其datasheet,不但支持SPI,也可通过I2C、UART等方式进行通信,尤其是UART,直接支持AT指令,大大简化开发难度,相当便利。本文即采用AT模式。

    ESP8266开发板,TB约12块左右,右侧为ESP8266,左侧为25Q80BVSIG,1M闪存。
    这里写图片描述

    二、接线
    1、ESP8266开发板引脚图
    这里写图片描述

    • TX:串口写
    • GND:接地
    • CH_PD:高电平为可用,低电平为关机
    • GPIO2:可悬空
    • RST:重置,可悬空
    • GPIO0:上拉为工作模式,下拉为下载模式,可悬空
    • VCC:3.3V(切不可接5V,烧片)
    • RX:串口读

    2、接线示意

    ESP8266 ArduinoMega ArduinoUuno
    TX 19(RX1) 0(RX0)
    GND GND GND
    CH_PD 5(自由指定) 5(自由指定)
    GPIO2 - -
    RST - -
    GPIO0 - -
    VCC 3.3V 3.3V
    RX 18(TX1) 1(TX1)

    ESP8266的串口默认波特率为115200,mega也可直接接RX0/TX0,
    为调试方便起见,本文中RX0/TX0留做调试窗口,用RX1/TX1和芯片交互。
    如果是UNO,如果要看调试信息,只能增加一个软串口。

    三、代码&运行
    虽然可以直接通过串口直接读写AT指令,但指令较多,处理繁琐,
    找到有如下的库对AT指令做了封装,使用十分便利,推荐。
    Git地址为:
    https://github.com/ekstrand/ESP8266wifi.git

    具体AT指令及ESP8266相关文档,可见乐鑫官方站点:
    http://espressif.com/zh-hans/support/download/documents

    1) ESP8266库安装
    下载上面的ESP8266的库后,将其复制到Arduino安装目录下的libraries目录下,启动ArduinoIDE后,从例子中选择ESP8266_tcp_cli。
    该库默认支持3个客户端连接和1个监听连接,如要增大须修改其头文件中的如下两个宏:

    define SERVER '4' 
    define MAX_CONNECTIONS 3

    2) 代码修改
    该库设计很灵活,设置了3个串口,入串口,出串口和调试串口。
    其中入串口和出串口用于AT命令发送和接收,和ESP8266的串口相连,调试串口可显示具体交互情况(AT指令信息等)原例子中采用的是UNO,因其只有一个硬串口,所以改为Mega适用,以查看调试信息。

    3) 运行
    加载运行后,如WIFI设置正常,则可接入WIFI并取得IP,如下:
    这里写图片描述

    可看到调试串口输出的AT指令,已经连接到WIFI,并取得192.168.80.188的IP.
    另外,2121端口被也监听成功。
    可用telnet 模拟客户端,连接建立成功后,输入数据0~D,hello world。
    输入的数据可从COM监视器中看到对应的AT指令。如下图:

    这里写图片描述

    四、例子代码解析

    从原有例子中删除了软串口相关的处理,如下

    #include <ESP8266wifi.h>
    
    #define esp8266_reset_pin 5
    #define SERVER_PORT "2121"
    #define SSID "XXXX"
    #define PASSWORD "yourpass"
    
    // 初始化,串口1和ESP8266交互,串口0做调试输出, pin5做reset
    ESP8266wifi wifi(Serial1, Serial1, esp8266_reset_pin, Serial);
    
    void processCommand(WifiMessage msg);
    uint8_t wifi_started = false;
    
    // 自定义的应用层命令,可根据自身应用修改
    const char RST[] PROGMEM = "RST";
    const char IDN[] PROGMEM = "*IDN?";
    
    void setup() {
    
      // 调试串口启动,波特率可随意指定
      Serial.begin(115200);
    
      // ESP8266默认波特率为115200(可用AT指令修改)
      Serial1.begin(115200);
      while (!Serial) // 等待串口初始化成功
        ;
      Serial1.println("Starting wifi"); // 命令
      Serial.println("Starting wifi");  // 调试log输出
    
      wifi.setTransportToTCP();       // TCP模式(默认设置)
      wifi.endSendWithNewline(false); // 发送数据自动以\r\n结尾(默认设置)
    
      wifi_started = wifi.begin();    // WIFI启动
      if (wifi_started) { // 如果WIFI初始化成功
        wifi.connectToAP(SSID, PASSWORD); // 指定用户名密码连接WIFI
        wifi.startLocalServer(SERVER_PORT); // 本机(Arduino)监听2121端口(做服务端)
    
      } else {
        // ESP8266 isn't working..
        Serial.println("ESP8266 isn't working..");
      }
    }
    
    void loop() {
    
      static WifiConnection *connections;
    
      // check connections if the ESP8266 is there
      if (wifi_started)
        wifi.checkConnections(&connections); // 检查/获取当前所有连接的状况
    
      // check for messages if there is a connection
      for (int i = 0; i < MAX_CONNECTIONS; i++) { // 默认最大为3
        if (connections[i].connected) {
          // See if there is a message
          WifiMessage msg = wifi.getIncomingMessage();
    
          if (msg.hasData) { // 如果有数据
            processCommand(msg);
          }
        }
      }
    }
    
    void processCommand(WifiMessage msg) { // 数据处理函数
      char espBuf[MSG_BUFFER_MAX];
      int set;
      char str[16];
    
      Serial.print(msg.message);
    
      // 以下为应用层面的处理
      sscanf(msg.message, "%15s %d", str, &set);
      Serial.print(str);
      Serial.println(set);
    
      if ( !strcmp_P(str, IDN) ) {
        wifi.send(msg.channel, "ESP8266wifi Example");
      }
      // Reset system by temp enable watchdog
      else if ( !strcmp_P(str, RST) ) {
        wifi.send(msg.channel, "SYSTEM RESET...");
        // soft reset by reseting PC
        asm volatile ("  jmp 0");
      }
      // Unknown command
      else {
        wifi.send(msg.channel, "ERR");
      }
    }

    五、参考URL
    详细参考(英语):
    https://github.com/ekstrand/ESP8266wifi
    http://blog.csdn.net/john_yike/article/details/47058857

    六、更多文章
    ESP8266可以和Arduino配合使用,充当起为Arduino进行Wifi连接、网络处理的任务。
    但其实esp8266本身对比arduino,功能、性能方面均是有过之而无不及,实有杀鸡用牛刀大材小用之感。
    更多ESP8266的文章,请见如下:
    https://blog.csdn.net/ydogg/article/category/6930257

    展开全文
  • 最近由于项目要求,需要开发物联网云平台,而本人对硬件和通信技术一窍不通,故而选择arduino这一简单单片机来实现学习掌握基础的硬件和通信技术。 下面就是本人通过查阅大佬资料做的一个整合版本的通过手机APP来...

       最近由于项目要求,需要开发物联网云平台,而本人对硬件和通信技术一窍不通,故而选择arduino这一简单单片机来实现学习掌握基础的硬件和通信技术。

       下面就是本人通过查阅大佬资料做的一个整合版本的通过手机APP来控制LED开关的实验:

    第一步:连线使用软串口方式,利用arduino来对ESP8266进行AT命令操作。

    连线参考图如下:

    连线完后,利用串口调试工具和Arduino IDE 软件进行编程,实现对ESP8266的软串口指令下达:

     

    #include <SoftwareSerial.h>

    SoftwareSerial mySerial(10, 11); // RX, TX

    void setup()
    {
    // Open serial communications and wait for port to open:
    Serial.begin(115200);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
    }
    Serial.println("Goodnight moon!");

    // set the data rate for the SoftwareSerial port
    mySerial.begin(115200);
    mySerial.println("Hello, world?");
    }

    void loop() // run over and over
    {
    if (mySerial.available())
    Serial.write(mySerial.read());
    if (Serial.available())
    mySerial.write(Serial.read());
    }

    ==程序效果==

    打开串口,设置波特率为115200,串口显示:

    Goodnight moon!
    Hello, world?

    ERROR

    表示已经进入AT模式,如果只有Goodnight moon!,说明没有进入AT模式。

    发送AT,反馈OK。

    第二步:利用AT命令来对ESP8266进行设置,使其连接到和手机在同一wifi网络中。

     

    1:发送AT+RST(执行指令)

    指令:AT+RST

    反馈:OK

    说明:刚上电可以不发送该指令,有些厂家生产的ESP8266模块,无法即时重启复位,导致串口无响应,如已发送,则重新开关串口按钮即可。

    2:发送AT+CWMODE=3或AT+CWMODE=2(设置指令)

    指令:AT+CWMODE=<MODE>

    说明:<MODE>:1为Station模式,2为AP模式,3为Station兼AP模式

    反馈:OK

     

    3:发送AT+CWJAP=“long”,”12345678”(选择你所要加入的路由器名称和密码进入)

    指令:AT+CWJAP=<ssid>,<pwd>

    <ssid>:字符串参数,ESP8266WIFI名字

    <pwd>:字符串参数,WIFI密码,最长64字节,ASCII

    具体内容如下:

    //设置WiFi应用模式为Station
    AT+CWMODE=3
    //连接到WiFi路由器,请将SSID替换为路由器名称,Password替换为路由器WiFi密码
    AT+CWJAP="SSID","Password"
    //连接单连模式
    AT+CIPMUX=0
    //设置为透传模式
    AT+CIPMODE=1
    //进入透传模式,并保存(进入后模块就一直为透传模式,需要退出则取消发送新行,发送+++)
    IP地址为远端设备地址,例:我用手机控制,那么我的手机在路由器WIFI上的IP地址为192.168.1.110
    AT+SAVETRANSLINK=1,"192.168.1.110",8080,"TCP"
    AT+CWMODE=3
    //连接到WiFi路由器,请将SSID替换为路由器名称,Password替换为路由器WiFi密码
    AT+CWJAP="SSID","Password"
    //连接单连模式
    AT+CIPMUX=0
    //设置为透传模式
    AT+CIPMODE=1
    //进入透传模式,并保存(进入后模块就一直为透传模式,需要退出则取消发送新行,发送+++)
    IP地址为远端设备地址,例:我用手机控制,那么我的手机在路由器WIFI上的IP地址为192.168.1.110
    AT+SAVETRANSLINK=1,"192.168.1.110",8080,"TCP"

    2018.04.24补充:此时若无USB转TTL工具,不要使用AT+SAVETRANSLINK指令,该指令会将当前设置存储到RAM中去,ESP8266通电后自动进入连接模式,除非使用USB转TTL进行烧写,否则将无法恢复到调试模式(无法使用AT指令)。本人掉坑,后USB转TTL烧写版本后,才恢复正常。 

    第三步,将LED的正极引脚插入9号数字口,负极接地,进行编程。

    int led_pin = 9;
    //定义一个10字节的整型数据变量cmd作为命令,这里可以修改为不同的数字。此处设置为10是为了有更好的兼容性。
    char cmd[10];
    //判断收到的cmd是否有内容
    bool valid_cmd = false;
    
    void setup()
    {
    //定义连接led的引脚为输出信号
    pinMode(led_pin, OUTPUT);
    Serial.begin(115200);
    }
    void loop()
    {
    /*以下部分是串口信息处理过程*/
    //定义一个整数型变量i
    int i;
    //如果串口收到有数据
    if (Serial.available() > 0)
    {
    //变量i最大为10
    for (i = 0; i < 10; i++)
    {
    //清空缓存,存入cmd变量,并以\0作为结束符
    cmd[i] = '\0';
    }
    //此时i只能取前9位,第10位是结束符\0
    for (i = 0; i < 9; i++)
    {
    //再次判断串口如果收到有数据,防止数据丢失
    if (Serial.available() > 0)
    {
    //给变量cmd赋值,取串口收到的前9位字符
    cmd[i] = Serial.read();
    delay(1);
    }
    else
    {
    //如果串口数据超过9位,后面的字符直接忽略,跳到下一步
    break;
    }
    }
    /*以上串口信息处理结束*/
    
    //得到最终变量cmd的有效值
    valid_cmd = true;
    }
    
    //判断变量cmd的值,开始处理
    if (valid_cmd)
    {
    //如果变量cmd的前2位的值是on
    if (0 == strncmp(cmd, "on", 2))
    {
    //则连接led的引脚电压被置高5V,
    digitalWrite(led_pin, HIGH);
    //串口打印返回值ON,表示ON的操作执行成功
    Serial.println("ON");
    }
    else if (0 == strncmp(cmd, "off", 3)) //否则如果变量cmd的前3位的值是off
    {
    //则连接继电器的引脚电压被置低0V,灯的电路被断开,灯灭
    digitalWrite(led_pin, LOW);
    //串口打印返回值F,表示OFF的操作执行成功
    Serial.println("OFF");
    }
    else //如果以上两个条件都不成立,前2位不是ON,或者前3位不是OFF,即不正确的命令
    {
    //仅串口打印返回值X,表示指令错误。
    Serial.println("X");
    }
    //到此,变量cmd的指令被处理完毕
    valid_cmd = false;
    }
    //延迟10毫秒,返回loop主程序继续读取新的串口指令
    delay(10);
    
    }

    第四步,安装APP进行验证。

     

    1、打开网络调试助手,点击TCP SERVER—-配置

    18A52A9D8177DF9B8BE1276CC4941491

     

    2、当开启服务端后,ESP8266自动连接上了:

    93F62FF2778F7ECAEEC5835F2061EB72

     

    3、在发送框内发送”on”即可点亮Arduino板载LED灯。

    427716C31B543BA557EA6AC07D4D2C8D

    BAD5F840EDD341B0F583D741F7E05841

     

    4、在发送框内发送”off”即可熄灭Arduino板载LED灯。

    38845248DABA686998901FA0E8F019AF

    总结:通过对网上资料的整理学习,实现了一种不通过USB转TTL烧写ESP8266的方式,对APP实现同一WiFi网络内LED开关。

    本文主要参考了如下资料:

    手机通过ESP8266控制Arduino上的LED灯(AT指令方式)

    手机通过ESP8266控制Arduino上的LED灯(烧写方式)

    更多工业交流和工作帮助可以订阅我的个人订阅号哦!

     

     

    展开全文
  • Arduino debug 实时单步调试.

    万次阅读 2017-03-14 16:33:20
    我找遍网上的文章,发现竟然没有人对如何调试arduino 的代码进行详细的讲解. 也有人说arduino 不能调试. 不过还好, 我英文虽然很烂.但是还算能看懂一点点. 我 使用的是visualmicro 这个vs插件配合Visual Studio 的...
  • 用“SmartConfig技术”控制Esp8266模块连接 路由器的无线网络。 在Arduino通过串口设置ESP8266位服务器模式,并且绑定TCP service端口。 然后 手机等设备通过Tcp协议连接Esp8266模块并发送TCP消息给ESP...
  • Arduino的时间库

    千次阅读 2018-05-14 19:21:16
    最近在做行为识别的课题,需要做一些IMU的设备,很久不做单片机这些东西了,捡起来有点小痛苦啊。 遇到一个问题就是需要在数据前打时间戳,但是I2...可支持从串口输入、外部RTC电路、网络、GPS等方式进行时间校准。...
  • usbtll串口模块如CH340,PL2302,这里我强烈推荐准备两个以上的模块,因为不是供电不足就是串口读取错误。 8266对应的针脚如上所示。 烧录模式下: 将UTXD接到串口模块的RX上, 将URXD接到串口模块的TX上 ...
  • 硬件要求: 1.esp8266-01模块 1-n个 ...使用1.6.4及以上版本的Arduino, 打开Arduino IDE,打开 文件-&amp;amp;amp;gt;首选项 在 附加开发板管理器网址 一栏写入: http://arduino.esp8266.com/packag...
  • arduino与processing串口通信问题

    万次阅读 2014-05-14 08:08:12
    最近进行Arduino与processing串口通信时遇到了这种问题,觉得这篇博文写的很对,就了下来,在此感谢原博主“行走的仙人”。 http://guoyunhe.me/zh/2013/03/10/arduino与processing的串口通信/ 在网络上普遍...
  • Arduino基础入门篇02—Arduino开发环境IDE安装使用

    万次阅读 多人点赞 2019-11-04 13:57:55
    工欲善其事,必先利其器。本文主要介绍Arduino开发环境IDE的安装及功能介绍。
  • 自己摸索着让模块和手机的TCP连上了,在串口助手那里也能互相发送数据, 但是无法做到让单片机自动给手机发消息,试了好久就是在两个串口的loop死循环 那里找不到突破口,求大神解答。
  • 如题
  • ArduinoArduino IDE使用教程-超详细

    千次阅读 多人点赞 2020-04-05 22:18:17
    本篇文章可以结合上一篇【Arduino】一天入门Arduino语言 教程 学习Arduino语法,以及Arduino IDE的使用,让你最快的掌握Arduino 文章目录Arduino IDE使用教程Arduino IDE安装配置Arduino IDEArduino IDE 使用详解...
  • Arduino使用ESP8266模块联网

    万次阅读 2018-05-23 17:01:16
    上一篇文章已经介绍了 利用 ArduinoIDE开发ESP8266模块,这篇文章介绍一下arduino怎么通过ESP8266模块联网 ESP8266模块准备 1. 透传程序烧写 以下程序的主要功能是: 1. 通电自动连接指定wifi 2....
  • 原本计划这一篇就直接讲tcpserver,但是我发现如果没有透传的基本概念的话,很难讲清楚整个流程以及应用。 如果读者以前就明白透传的概念,那么可以直接跳过这一篇了。 接下来以零基础的方式来解释。...
  • ESP8266串口WiFi扩展板详解

    万次阅读 2016-04-27 17:32:14
    ESP8266串口WiFi扩展板是深圳四博智联科技有限公司开发的一款基于乐鑫ESP8266的超低功耗的UART-WiFi模块,兼容Arduino UNO、Mega等标准主板,可以方便地进行二次开发,加速产品原型设计。
  • arduino 蓝牙SSP远程烧录

    千次阅读 2015-08-15 14:13:16
    TCP/IP需要网络模块,配置和模块都比较复杂。 USB to TTL+蓝牙模块,笔记本上还要插一个USB+蓝牙模块也好不了哪里去。 这里推出的就是一套比较简单的蓝牙远程烧录解决方案。仅需要一台带蓝牙的笔记本/PC,然后需要...
  • arduino与ESP8266 WIFI模块的连接测试

    万次阅读 2015-07-25 19:05:57
    这几天我就趁放假的时间参考大量的网络资料,并且经过反复的实践成功把它们俩连在一起。下面我把实验过程描述如下: 一、器材准备 首先说一下用到的硬件设备: 1、Arduino uno 2、ESP8266模块 3、杜邦线若干 二、...
  • 在stm32上使用Arduino IDE(神舟I号为例)

    万次阅读 2015-02-17 13:15:47
    在stm32上面使用Arduino IDE的通用方法。
1 2 3 4 5 ... 20
收藏数 1,541
精华内容 616
关键字:

arduino 串口转网络