当前位置: 首页 > news >正文

ProgrammingArduino物联网

programming_arduino_ed2

IO

延时闪灯

void setup()
{pinMode(13, OUTPUT);
}void loop()
{digitalWrite(13, HIGH);delay(500);digitalWrite(13, LOW);delay(500);
}// sketch 03-02 加入变量====
int ledPin = 13;
int delayPeriod = 500;void setup()
{pinMode(ledPin, OUTPUT);
}void loop()
{digitalWrite(ledPin, HIGH);delay(delayPeriod);digitalWrite(ledPin, LOW);delay(delayPeriod);
}// sketch 03-03  快闪--->满闪=====
int ledPin = 13;
int delayPeriod = 100;void setup()
{pinMode(ledPin, OUTPUT);
}void loop()
{digitalWrite(ledPin, HIGH);delay(delayPeriod);digitalWrite(ledPin, LOW);delay(delayPeriod);delayPeriod = delayPeriod + 100;
}// sketch 03-06    快闪--->满闪-->快闪--->满闪---循环
int ledPin = 13;
int delayPeriod = 100;void setup()
{pinMode(ledPin, OUTPUT);
}void loop()
{digitalWrite(ledPin, HIGH);delay(delayPeriod);digitalWrite(ledPin, LOW);delay(delayPeriod);delayPeriod = delayPeriod + 100; // 闪烁变慢if (delayPeriod > 1000) // 循环===回到初始状态{delayPeriod = 100; }
}// sketch 03-08   ===== for循环 闪灯
int ledPin = 13;
int delayPeriod = 250;void setup()
{pinMode(ledPin, OUTPUT);
}void loop()
{for (int i = 0; i < 20; i ++){digitalWrite(ledPin, HIGH);delay(delayPeriod);digitalWrite(ledPin, LOW);delay(delayPeriod);}delay(3000);
}// sketch 03-09  带有休息时段的 常数闪灯=====
int ledPin = 13;
int delayPeriod = 100;
int count = 0;void setup()
{pinMode(ledPin, OUTPUT);
}void loop()
{digitalWrite(ledPin, HIGH);delay(delayPeriod);digitalWrite(ledPin, LOW);delay(delayPeriod);count ++;if (count == 20){count = 0;delay(3000);  // 闪烁20次,定时休息}
}// sketch 04-04==========带有休息时段的 常数闪灯 const static变量=====
const int ledPin = 13;
const int delayPeriod = 250;void setup()
{pinMode(ledPin, OUTPUT);
}void loop()
{static int count = 0;digitalWrite(ledPin, HIGH);delay(delayPeriod);digitalWrite(ledPin, LOW);delay(delayPeriod);count ++;if (count == 20){count = 0;delay(3000);}
}// sketch 04-01   for 循环实现闪灯  闪灯程序打包成函数====
const int ledPin = 13;
const int delayPeriod = 250;void setup()
{pinMode(ledPin, OUTPUT);
}void loop()
{for (int i = 0; i < 20; i ++){//  for 循环实现闪灯flash();}delay(3000);
}// 闪灯程序打包成函数
void flash()
{digitalWrite(ledPin, HIGH);delay(delayPeriod);digitalWrite(ledPin, LOW);delay(delayPeriod);
}// sketch 04-02=============进一步包装闪灯程序
const int ledPin = 13;
const int delayPeriod = 250;void setup()
{pinMode(ledPin, OUTPUT);
}void loop()
{flash(20, delayPeriod);delay(3000);
}void flash(int numFlashes, int d)
{for (int i = 0; i < numFlashes; i ++){digitalWrite(ledPin, HIGH);delay(d);digitalWrite(ledPin, LOW);delay(d);}
}// sketch 05-02   闪灯延时指定 时间  数组=====================
const int ledPin = 13;
int durations[] = {200, 200, 200, 500, 500, 500, 200, 200, 200};void setup()
{pinMode(ledPin, OUTPUT);
}void loop() 
{for (int i = 0; i < 9; i++){flash(durations[i]);}delay(1000);
}void flash(int duration)
{digitalWrite(ledPin, HIGH);delay(duration);digitalWrite(ledPin, LOW);delay(duration);
}//sketch 06-04  ======= io 口 控制 灯开关 ==========
const int inputPin = 5;
const int ledPin = 13;void setup()
{pinMode(ledPin, OUTPUT);pinMode(inputPin, INPUT_PULLUP);
}void loop()
{int switchOpen = digitalRead(inputPin);digitalWrite(ledPin, !switchOpen);
}//sketch 06-05    =====低电平触发 闪灯===============
const int inputPin = 5;
const int ledPin = 13;
int ledValue = LOW;
void setup() 
{pinMode(inputPin, INPUT_PULLUP);// 上拉pinMode(ledPin, OUTPUT);
}
void loop() 
{if (digitalRead(inputPin) == LOW) //低电平触发 闪灯 {ledValue = !ledValue;digitalWrite(ledPin, ledValue);delay(500);}
}//sketch 06-07   ===== 按键消抖 控制灯闪烁======
#include <Bounce2.h>  // 按键消抖 库 
const int inputPin = 5;
const int ledPin = 13;
int ledValue = LOW;
Bounce bouncer = Bounce(); void setup() 
{pinMode(inputPin, INPUT_PULLUP);pinMode(ledPin, OUTPUT);bouncer.attach(inputPin);// bouncer.interval(50); // interval in ms
}void loop() 
{if (bouncer.update() && bouncer.read() == LOW)  // 按键消抖{ledValue = ! ledValue;digitalWrite(ledPin, ledValue);// delay(500);}
}//sketch 07-04  ===端口中断===改变闪灯节奏===const int interruptPin = 2;
const int ledPin = 13;
int period = 500;void setup()
{pinMode(ledPin, OUTPUT);pinMode(interruptPin, INPUT_PULLUP);attachInterrupt(0, goFast, FALLING);// 端口中断 下降沿中断
}void loop() 
{digitalWrite(ledPin, HIGH);delay(period);digitalWrite(ledPin, LOW);delay(period);  
}// 端口中断函数 改变闪灯节奏
void goFast()
{period = 100;
}

模拟量测量

//sketch 06-08const int analogPin = 0;void setup()
{Serial.begin(9600);
}
void loop()
{int reading = analogRead(analogPin); // 模拟量测量float voltage = reading / 204.6;// 转换成电压Serial.print("Reading=");Serial.print(reading);Serial.print("\t\tVolts=");Serial.println(voltage);delay(500);
}

Arduino音乐键盘tone函数

//sketch 07-03
void setup()
{tone(4, 500);
}
void loop() {}

串口


// sketch 03-04
void setup()
{Serial.begin(9600);int a = 2;int b = 2;int c = a + b;Serial.println(c); Serial.println("Hello");
}
void loop()
{}// sketch 5-04 ===============打印字符串数组========
char message[] = "Hello";void setup()
{Serial.begin(9600);
}void loop()
{Serial.println(message);delay(1000);
}// sketch 03-05   串口 华氏度 摄氏度 转换=====
void setup()
{Serial.begin(9600);int degC = 20;int degF;degF = degC * 9 / 5 + 32;Serial.println(degF); 
}
void loop()
{}// sketch 05-01   串口打印数组================
int durations[] = {200, 200, 200, 500, 500, 500, 200, 200, 200};void setup()
{Serial.begin(9600);  for (int i = 0; i < 9; i++){Serial.println(durations[i]);}
}void loop() {}// sketch 5-05  ======= 串口和闪灯混合,串口字符控制闪灯节奏=======const int ledPin = 13;
const int dotDelay = 200;char* letters[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",    // A-I".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",  // J-R"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."          // S-Z
};char* numbers[] = {"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----."};void setup()                 
{pinMode(ledPin, OUTPUT);Serial.begin(9600);
}void loop()                    
{char ch;if (Serial.available() > 0){ch = Serial.read();if (ch >= 'a' && ch <= 'z'){flashSequence(letters[ch - 'a']);}else if (ch >= 'A' && ch <= 'Z'){flashSequence(letters[ch - 'A']);}else if (ch >= '0' && ch <= '9'){flashSequence(numbers[ch - '0']);}else if (ch == ' '){delay(dotDelay * 4);  // gap between words  }}
}void flashSequence(char* sequence)
{int i = 0;while (sequence[i] != NULL){flashDotOrDash(sequence[i]);i++;}delay(dotDelay * 3);    // gap between letters
}void flashDotOrDash(char dotOrDash)
{digitalWrite(ledPin, HIGH);if (dotOrDash == '.'){delay(dotDelay);           }else // must be a dash{delay(dotDelay * 3);           }digitalWrite(ledPin, LOW);    delay(dotDelay); // gap between flashes
}// sketch 8-01 ====内存拷贝=====串口控制=====const int ledPin = 13;
const int dotDelay = 200;const int maxLen = 6; // including null on the endPROGMEM const char letters[26][maxLen] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",    // A-I".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",  // J-R"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."          // S-Z
};PROGMEM const char numbers[10][maxLen] = {"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----."
};void setup()                 
{pinMode(ledPin, OUTPUT);Serial.begin(9600);
}void loop()                    
{char ch;char sequence[maxLen];if (Serial.available() > 0){ch = Serial.read();if (ch >= 'a' && ch <= 'z'){memcpy_P(&sequence, letters[ch - 'a'], maxLen);// 内存拷贝flashSequence(sequence);}else if (ch >= 'A' && ch <= 'Z'){memcpy_P(&sequence, letters[ch - 'A'], maxLen);flashSequence(sequence);}else if (ch >= '0' && ch <= '9'){memcpy_P(&sequence, numbers[ch - '0'], maxLen);flashSequence(sequence);}else if (ch == ' '){delay(dotDelay * 4);  // gap between words  }}
}void flashSequence(char* sequence)
{int i = 0;while (sequence[i] != NULL){flashDotOrDash(sequence[i]);i++;}delay(dotDelay * 3);    // gap between letters
}void flashDotOrDash(char dotOrDash)
{digitalWrite(ledPin, HIGH);if (dotOrDash == '.'){delay(dotDelay);           }else // must be a dash{delay(dotDelay * 3);           }digitalWrite(ledPin, LOW);    delay(dotDelay); // gap between flashes
}//sketch 6-01    =======串口控制 灯 开关====
const int outPin = 3;void setup()
{pinMode(outPin, OUTPUT);Serial.begin(9600);Serial.println("Enter 1 or 0");
}void loop()
{if (Serial.available() > 0){char ch = Serial.read();if (ch == '1'){digitalWrite(outPin, HIGH);}else if (ch == '0'){digitalWrite(outPin, LOW);}}
}//sketch 06-02  ===== =====读取io状态,并串口打印=========
const int inputPin = 5;
void setup()
{pinMode(inputPin, INPUT);Serial.begin(9600);
}void loop()
{int reading = digitalRead(inputPin); // 普通输入,默认 低电平Serial.println(reading);delay(1000);
}//sketch 06-03 =====上拉输入,默认为 高电平 打印 io口状态=========
const int inputPin = 5;void setup()
{pinMode(inputPin, INPUT_PULLUP);  // 上拉输入,默认为 高电平Serial.begin(9600);
}void loop()
{int reading = digitalRead(inputPin);Serial.println(reading);delay(1000);
}//sketch 07-01  === 打印随机数==========
void setup()
{Serial.begin(9600);randomSeed(analogRead(0)); // 随机数种子
}void loop()
{int number = random(1, 7);Serial.println(number);delay(500); 
}

flash 闪存 内存 rom 内存读写

// sketch 08-02  ==== 串口读数据 写入内存=======
#include <EEPROM.h>
int addr = 0;
char ch;
void setup()                 
{Serial.begin(9600);ch = EEPROM.read(addr);
}
void loop()                    
{if (Serial.available() > 0){ch = Serial.read();   // 串口读数据EEPROM.write(0, ch);  // 写入内存 单个字节数据Serial.println(ch);}Serial.println(ch);delay(1000);
}// sketch 08-06 ========清空内存数据=================
#include <EEPROM.h>
void setup()                 
{Serial.begin(9600);Serial.println("Clearing EEPROM");for (int i = 0; i < 1024; i++){EEPROM.write(i, 0);}Serial.println("EEPROM Cleared");
}
void loop() {}// sketch 08-03 ====== 向内存 读写 多字节数据
#include <avr/eeprom.h>
void setup() 
{Serial.begin(9600);int i1 = 123;eeprom_write_block(&i1, 0, 2); // 写2个字节长度的数据int i2 = 0;eeprom_read_block(&i2, 0, 2);Serial.println(i2);
}
void loop() {}// sketch 08-04 ======== 写 浮点数===========
#include <avr/eeprom.h>
void setup() 
{Serial.begin(9600);float f1 = 1.23;eeprom_write_block(&f1, 0, 4);// 4字节float f2 = 0;eeprom_read_block(&f2, 0, 4);Serial.println(f2);
}
void loop() {}//sketch 08-07  =========浮点数扩大后(量化) 以一个字节数据 进行存储
#include <EEPROM.h>
void setup()
{float tempFloat = 20.75;byte tempByte = (int)(tempFloat * 4); // 浮点数扩大后(量化)EEPROM.write(0, tempByte); // 以一个字节数据 进行存储byte tempByte2 = EEPROM.read(0); // 以一个字节数据 进行读取float temp2 = (float)(tempByte2) / 4; // 反量化Serial.begin(9600);Serial.println("\n\n\n");Serial.println(temp2);
}
void loop(){}// sketch 08-05 =============内存存储 字符串 密码数组
#include <avr/eeprom.h>
const int maxPasswordSize = 20; // 数组长度
char password[maxPasswordSize]; // 字符串 密码数组void setup() 
{eeprom_read_block(&password, 0, maxPasswordSize);Serial.begin(9600);
}void loop() 
{Serial.print("Your password is:");Serial.println(password);Serial.println("Enter a NEW password");     while (!Serial.available()) {};int n = Serial.readBytesUntil('\n', password, maxPasswordSize);password[n] = '\0';eeprom_write_block(password, 0, maxPasswordSize);  // 写 字符串 密码数组Serial.print("Saved Password: ");Serial.println(password);
}

显示屏

// sketch 09-01 USB Message Board   LCD==============================
#include <LiquidCrystal.h>
//            lcd(RS E  D4 D5 D6 D7) // 各端口=====
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
/*
其他接口形式LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
*/
int numRows = 2;
int numCols = 16;
/*
begin()——定义LCD的长宽(n列×n行),格式lcd.begin(cols, rows)clear()——清空LCD,格式lcd.clear()home()——把光标移回左上角,即从头开始输出,格式lcd.home()setCursor()——移动光标到特定位置,格式lcd.setCursor(col, row)write()——在屏幕上显示内容(必须是一个变量,如”Serial.read()”),格式lcd.write(data)print()——在屏幕上显示内容(字母、字符串,等等),格式lcd.print(data)lcd.print(data, BASE)cursor()——显示光标(一条下划线),格式lcd.cursor()noCursor()——隐藏光标,格式lcd.noCursor()blink()——闪烁光标,格式lcd.blink()noBlink()——光标停止闪烁,格式lcd.noBlink()display()——(在使用noDisplay()函数关闭显示后)打开显示(并恢复原来内容),格式lcd.display()noDisplay()——关闭显示,但不会丢失原来显示的内容,格式为lcd.noDisplay()scrollDisplayLeft()——把显示的内容向左滚动一格,格式lcd.scrollDisplayLeft()scrollDisplayRight()——把显示的内容向右滚动一格,格式为lcd.scrollDisplayRight()autoscroll()——打开自动滚动,这使每个新的字符出现后,原有的字符都移动一格:如果字符一开始从左到右(默认),那么就往左移动一格,否则就向右移动,格式lcd.autoscroll()noAutoscroll()——关闭自动滚动,格式lcd.noAutoscroll()leftToRight()——从左往右显示,也就是说显示的字符会从左往右排列(默认),但屏幕上已经有的字符不受影响,格式lcd.leftToRight()rightToLeft()——从右往左显示,格式lcd.rightToLeft()createChar()——自造字符,最多5×8像素,编号0-7,字符的每个像素显示与否由数组里的数(0-不显示,1-显示)决定,格式lcd.createChar(num, data),有点难理解,可以看一个例子
*/
void setup()
{Serial.begin(9600);lcd.begin(numRows, numCols);lcd.clear();lcd.setCursor(0,0);lcd.print("Arduino");lcd.setCursor(0,1);lcd.print("Rules");
}void loop()
{if (Serial.available() > 0) {char ch = Serial.read();if (ch == '#'){lcd.clear();}else if (ch == '/'){// new linelcd.setCursor(0, 1);}else{lcd.write(ch);}}
}// sketch 09_02 ====I2C(SSD1306)驱动0.96寸12864 OLED========#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>Adafruit_SSD1306 display(4); // pick an unused pinvoid setup()   
{                display.begin(SSD1306_SWITCHCAPVCC, 0x3c);  // may need to change thisdisplay.setTextSize(4);display.setTextColor(WHITE);
}void loop() 
{static int count = 0;display.clearDisplay();display.drawRoundRect(0, 0, 127, 63, 8, WHITE);display.setCursor(20,20);display.print(count);display.display();count ++;if (count > 9999){count = 0;}delay(1000);
}

物联网专题 Ethernet(以太网)

// sketch 10-01 DHCP ==================动态ip访问======
#include <SPI.h>
#include <Ethernet.h>
// MAC address just has to be unique. This should work
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };EthernetServer server(80);void setup()
{Serial.begin(9600);Ethernet.begin(mac);server.begin();Serial.print("Server started on: ");Serial.println(Ethernet.localIP());
}void loop()
{// listen for incoming clientsEthernetClient client = server.available();if (client) {while (client.connected()) {// send a standard http response headerclient.println("HTTP/1.1 200 OK");client.println("Content-Type: text/html");client.println();// send the bodyclient.println("<html><body>");client.println("<h1>Arduino Server</h1>");client.print("<p>A0="); client.print(analogRead(0)); client.println("</p>"); client.print("<p>millis="); client.print(millis()); client.println("</p>"); client.println("</body></html>");client.stop();}delay(1);}
}// sketch 10-01 Static IP  ====== 静态ip访问=================================
#include <SPI.h>
#include <Ethernet.h>
// MAC address just has to be unique. This should work
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// The IP address will be dependent on your local network:
byte ip[] = { 192, 168, 1, 30 };EthernetServer server(80);void setup()
{Ethernet.begin(mac, ip);server.begin();Serial.begin(9600);
}void loop()
{// listen for incoming clientsEthernetClient client = server.available();if (client) {while (client.connected()) {// send a standard http response headerclient.println("HTTP/1.1 200 OK");client.println("Content-Type: text/html");client.println();// send the bodyclient.println("<html><body>");client.println("<h1>Arduino Server</h1>");client.print("<p>A0="); client.print(analogRead(0)); client.println("</p>"); client.print("<p>millis="); client.print(millis()); client.println("</p>"); client.println("</body></html>");client.stop();}delay(1);}
}// sketch 10-02 Web Controlled Arduino   动态IP WEB远程控制 终端arduino#include <SPI.h>
#include <Ethernet.h>// MAC address just has to be unique. This should work
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };EthernetServer server(80);int numPins = 5;
int pins[] = {3, 4, 5, 6, 7};
int pinState[] = {0, 0, 0, 0, 0};
char line1[100];void setup()
{for (int i = 0; i < numPins; i++){pinMode(pins[i], OUTPUT);}Serial.begin(9600);Ethernet.begin(mac);server.begin();Serial.print("Server started on: ");Serial.println(Ethernet.localIP());
}void loop()
{EthernetClient client = server.available();if (client) {while (client.connected()) {readHeader(client);if (! pageNameIs("/")){client.stop();  return;}client.println("HTTP/1.1 200 OK");client.println("Content-Type: text/html");client.println();// send the bodyclient.println("<html><body>");client.println("<h1>Output Pins</h1>");client.println("<form method='GET'>");  setValuesFromParams();setPinStates();for (int i = 0; i < numPins; i++){writeHTMLforPin(client, i);}client.println("<input type='submit' value='Update'/>");client.println("</form>");client.println("</body></html>");client.stop();            }}
}void writeHTMLforPin(EthernetClient client, int i)
{client.print("<p>D");client.print(pins[i]);  client.print(" <select name='");client.print(i);client.println("'>");client.print("<option value='0'");if (pinState[i] == 0){client.print(" selected");}client.println(">Off</option>");client.print("<option value='1'");if (pinState[i] == 1){client.print(" selected");}client.println(">On</option>");client.println("</select></p>");  
}void setPinStates()
{for (int i = 0; i < numPins; i++){digitalWrite(pins[i], pinState[i]);}
}void setValuesFromParams()
{for (int i = 0; i < numPins; i++){pinState[i] = valueOfParam(i + '0');}
}void readHeader(EthernetClient client)
{// read first line of headerchar ch;int i = 0;while (ch != '\n'){if (client.available()){ch = client.read();line1[i] = ch;i ++;}}line1[i] = '\0'; Serial.println(line1);
}boolean pageNameIs(char* name)
{// page name starts at char pos 4// ends with spaceint i = 4;char ch = line1[i];while (ch != ' ' && ch != '\n' && ch != '?'){if (name[i-4] != line1[i]){return false;}i++;ch = line1[i];}return true;
}int valueOfParam(char param)
{for (int i = 0; i < strlen(line1); i++){if (line1[i] == param && line1[i+1] == '='){return (line1[i+2] - '0');}}return 0;
}// sketch 10-02 Internet Pins ====== 静态ip web远程控制 终端 arduino==============#include <SPI.h>
#include <Ethernet.h>// MAC address just has to be unique. This should work
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// The IP address will be dependent on your local network:
byte ip[] = { 192, 168, 1, 30 };
EthernetServer server(80);int numPins = 5;
int pins[] = {3, 4, 5, 6, 7};
int pinState[] = {0, 0, 0, 0, 0};
char line1[100];void setup()
{for (int i = 0; i < numPins; i++){pinMode(pins[i], OUTPUT);}Serial.begin(9600);Ethernet.begin(mac, ip);server.begin();
}void loop()
{EthernetClient client = server.available();if (client) {while (client.connected()) {readHeader(client);if (! pageNameIs("/")){client.stop();  return;}client.println("HTTP/1.1 200 OK");client.println("Content-Type: text/html");client.println();// send the bodyclient.println("<html><body>");client.println("<h1>Output Pins</h1>");client.println("<form method='GET'>");  setValuesFromParams();setPinStates();for (int i = 0; i < numPins; i++){writeHTMLforPin(client, i);}client.println("<input type='submit' value='Update'/>");client.println("</form>");client.println("</body></html>");client.stop();            }}
}void writeHTMLforPin(EthernetClient client, int i)
{client.print("<p>D");client.print(pins[i]);  client.print(" <select name='");client.print(i);client.println("'>");client.print("<option value='0'");if (pinState[i] == 0){client.print(" selected");}client.println(">Off</option>");client.print("<option value='1'");if (pinState[i] == 1){client.print(" selected");}client.println(">On</option>");client.println("</select></p>");  
}void setPinStates()
{for (int i = 0; i < numPins; i++){digitalWrite(pins[i], pinState[i]);}
}void setValuesFromParams()
{for (int i = 0; i < numPins; i++){pinState[i] = valueOfParam(i + '0');}
}void readHeader(EthernetClient client)
{// read first line of headerchar ch;int i = 0;while (ch != '\n'){if (client.available()){ch = client.read();line1[i] = ch;i ++;}}line1[i] = '\0'; Serial.println(line1);
}boolean pageNameIs(char* name)
{// page name starts at char pos 4// ends with spaceint i = 4;char ch = line1[i];while (ch != ' ' && ch != '\n' && ch != '?'){if (name[i-4] != line1[i]){return false;}i++;ch = line1[i];}return true;
}int valueOfParam(char param)
{for (int i = 0; i < strlen(line1); i++){if (line1[i] == param && line1[i+1] == '='){return (line1[i+2] - '0');}}return 0;
}

无线网模块

// sketch 10-03. Node MCU Basic Web Server#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>const char* ssid = "my-network-name"; // 无线网名称
const char* password = "my_password"; // 无线网密码ESP8266WebServer server(80);void handleRoot()
{String message = "<html><body>\n";message += "<h1>Arduino Server</h1>\n";message += "<p>A0="; message += analogRead(A0); message += "</p>"; message += "<p>millis="; message += millis(); message += "</p>"; message += "</html></body>\n";server.send(200, "text/html", message);
}void connectToWiFi()
{Serial.print("\n\nConnecting to ");Serial.println(ssid);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("\nWiFi connected");  Serial.print("IP address: ");Serial.println(WiFi.localIP());
}void setup()
{Serial.begin(115200);connectToWiFi();server.on("/", handleRoot);server.begin();Serial.println("HTTP server started");
}void loop()
{server.handleClient();
}// sketch 10-04 Web Controlled Node MCU ==== 无线网 控制终端 arduino==========#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>const char* ssid = "my-network-name";
const char* password = "my_password";int numPins = 5;
char* pinNames[] = {"D5", "D6", "D7", "D8", "D9"};
int pins[] = {D5, D6, D7, D8, D9};
int pinState[] = {0, 0, 0, 0, 0};ESP8266WebServer server(80);void setPinStates()
{for (int i = 0; i < numPins; i++){digitalWrite(pins[i], pinState[i]);}
}void setValuesFromParams()
{for (int i = 0; i < numPins; i++){pinState[i] = server.arg(i).toInt();}
}void connectToWiFi()
{Serial.print("\n\nConnecting to ");Serial.println(ssid);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("\nWiFi connected");  Serial.print("IP address: ");Serial.println(WiFi.localIP());
}void handleRoot()
{char buff[1000];Serial.println("Got a Request");setValuesFromParams();setPinStates();strcat(buff, "<html><body>\n");strcat(buff, "<h1>Output Pins</h1>\n");strcat(buff, "<form method='GET'>\n"); for (int i = 0; i < numPins; i++){strcat(buff, "<p>");strcat(buff, pinNames[i]);strcat(buff, " <select name='");char indexStr[10];sprintf(indexStr, "%d", i);strcat(buff, indexStr);strcat(buff, "'><option value='0'");if (pinState[i] == 0){strcat(buff, " selected");}strcat(buff, ">Off</option>");strcat(buff, "<option value='1'");if (pinState[i] == 1){strcat(buff, " selected");}strcat(buff, ">On</option></select></p>\n");}strcat(buff, "<input type='submit' value='Update'/>");strcat(buff, "</form></html></body>\n");server.send(200, "text/html", buff);
}void setup()
{for (int i = 0; i < numPins; i++){pinMode(pins[i], OUTPUT);}Serial.begin(115200);connectToWiFi();server.on("/", handleRoot);server.begin();Serial.println("HTTP server started");
}void loop()
{server.handleClient();
}

IFTTT 表示如果在“this”上发生了某些事情,那么我们需要在“that”上做一些事情。

// sketch 10-05 IFTTT
#include <SPI.h>
#include <Ethernet.h>// MAC address just has to be unique. This should work
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };const char* key = "c1AsQq_qsQVTSO5-6NASqg";
const char* host = "maker.ifttt.com";
const int httpPort = 80;
const long sendPeriod = 60000L; // 1 minuteEthernetClient client;void setup()
{Serial.begin(9600);Ethernet.begin(mac);
}void sendToIFTTT(int reading)
{client.stop(); // for second time around the loopSerial.print("connecting to ");Serial.println(host);if (!client.connect(host, httpPort)) {Serial.println("connection failed");return;}String url = "/trigger/arduino_spoke/with/key/";url += key;url += "?value1=" + String(reading);String req = String("GET ") + url + " HTTP/1.1\r\n" +  "Host: " + host + "\r\n" +"Connection: close\r\n\r\n";Serial.println(req);client.print(req);
}void loop() 
{static long lastReadingTime = 0;long now = millis();if (now > lastReadingTime + sendPeriod){int reading = analogRead(A0);sendToIFTTT(reading);lastReadingTime = now;}if (client.available()){Serial.write(client.read());}
}// sketch 10_06=======wifi连接IFTTT=================#include <ESP8266WiFi.h>const char* ssid = "my-network-name";
const char* password = "my_password";
const char* key = "c1AsQq_qsQVTSO5-6NASqg";
const char* host = "maker.ifttt.com";
const int httpPort = 80;
const long sendPeriod = 10000L; // 1 minuteWiFiClient client;void connectToWiFi()
{Serial.print("\n\nConnecting to ");Serial.println(ssid);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("\nWiFi connected");  Serial.print("IP address: ");Serial.println(WiFi.localIP());
}void sendToIFTTT(int reading)
{Serial.print("connecting to ");Serial.println(host);if (!client.connect(host, httpPort)) {Serial.println("connection failed");return;}String url = "/trigger/arduino_spoke/with/key/";url += key;url += "?value1=" + String(reading);String req = String("GET ") + url + " HTTP/1.1\r\n" +  "Host: " + host + "\r\n" +"Connection: close\r\n\r\n";Serial.println(req);client.print(req);
}void setup() 
{Serial.begin(115200);connectToWiFi();
}void loop() 
{static long lastReadingTime = 0;long now = millis();if (now > lastReadingTime + sendPeriod){int reading = analogRead(A0);sendToIFTTT(reading);lastReadingTime = now;}if (client.available()){Serial.write(client.read());}
}
http://www.lryc.cn/news/132394.html

相关文章:

  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第一天)Mybatis的学习
  • Programming abstractions in C阅读笔记: p118-p122
  • 2023国赛数学建模思路 - 案例:ID3-决策树分类算法
  • selenium 选定ul-li下拉选项中某个指定选项
  • 回归预测 | MATLAB实现FA-SVM萤火虫算法优化支持向量机多输入单输出回归预测(多指标,多图)
  • 使用pytorch 的Transformer进行中英文翻译训练
  • 解决element的select组件创建新的选项可多选且opitions数据源中有数据的情况下,回车不能自动选中创建的问题
  • 人工智能大模型加速数据库存储模型发展 行列混合存储下的破局
  • K8S用户管理体系介绍
  • 实现chatGPT 聊天样式
  • day9 STM32 I2C总线通信
  • 终极Shell:Zsh(CentOS7 安装 zsh 及 配置 Oh my zsh)
  • Redis的数据持久化
  • CSS 选择器
  • 上位机工作总结(2023.03-2023.08)
  • APSIM模型参数优化 批量模拟丨气象数据准备、物候发育和光合生产、物质分配与产量模拟、土壤水分平衡算法、土壤碳氮平衡模块、农田管理模块等
  • Azure防火墙
  • 【LeetCode】剑指 Offer Ⅱ 第4章:链表(9道题) -- Java Version
  • Android SDK 上手指南|| 第三章 IDE:Android Studio速览
  • Vue--》打造个性化医疗服务的医院预约系统(七)完结篇
  • 点亮一颗LED灯
  • SSH远程直连--------------Docker容器
  • Python/Spring Cloud Alibaba开发--前端复习笔记(1)———— html5和css3.html基础
  • open cv学习 (十一)视频处理
  • 函数栈帧理解
  • 【SA8295P 源码分析】70 - QAM8295P 原理图参考设计 之 DP、eDP 接口硬件原理分析
  • 【CSS动画02--卡片旋转3D】
  • 数据结构<树和二叉树>顺序表存储二叉树实现堆排
  • 理解docker命令
  • 【SA8295P 源码分析】16 - QNX侧 TouchScreen Panel (TP)线程函数 tp_recv_thread 源码分析