当前位置:   article > 正文

arduino 编程esp8266_esp8266 arduino程序

esp8266 arduino程序

概述:

       1.板子外设资源的访问:Libraries - Arduino Reference

    注意:开发板未nodeMCU1.0(esp-12e)(esp8266-01s上调试的。)

     2.硬件接线

       en,vcc接3.3v,gnd接地(也就是和串口共地),gpio1接地。tx接串口rx,rx接串口tx,rst不接的化烧录完断电重启就行,拔掉gpio1。en可接可不接,是一个低功耗触发引脚。

    3,界面配置

        

  烧录波特率:

          9600,停止位,无校验,8位数据,硬件流控制无。9600不行试一下115200。

         等编译完成显示uplodaing的时候再给板子上电,当然你买的现成开发板就不用看这个,因为这个是esp8266-01s那个模块的。

   4.加载库和寻找库

          直接搜,然后安装,安装完点那个三点下载例程。 

       

       

5.WiFi连接扫描和http

  代码: 

  1.     #include <ESP8266WiFi.h>//默认,加载WIFI头文件
  2.     #include <Arduino_JSON.h> //加载解析文件库
  3.     #include <ArduinoHttpClient.h>  //加载http客户端库
  4. WiFiClient espClient;
  5. const char * ssid="wifi_name";//wifi名称
  6. const chat * pwd="wifi_password";//WiFi 密码
  7. HttpClient http = HttpClient(espClient,"www.baidu.com",80);//定义一个http客户端
  8. String mes;
  9. void setup(){
  10. WiFi.begin(ssid.pwd);//连接wifi
  11. if(WiFi.state()==3)
  12. printf("连接成功");
  13. delay(500);
  14. int n=WiFi.scanNetworks();//扫描附近wifi
  15. mes=JsonSerialization(n); //将扫描出的WiFi信息json序列化
  16. printf(mes);//打印出扫描到的附近wifi
  17. delay(100);
  18. }
  19. void loop(){
  20. String contentType="application/json"; //请求内容格式
  21. String url=""; //数据路径
  22. httpm.get(url);//发送get请求,所有的东西都在url中
  23. int mhttpCode = http.responseStatusCode();//阻塞响应,就是等待响应,一般10s超时跳过
  24. String mresponse = http.responseBody(); //获得响应数据
  25. JSONVar mtemp=JSON.parse(mresponse);//将字符串转成json格式
  26. if (JSON.typeof(mtemp) == "undefined") {
  27. Serial.println("Parsing input failed!");
  28. return;
  29. }
  30. delay(1000);
  31. String contentType="application/json";
  32. String url="";
  33. http.post(url, contentType, message); //可以发现post和get还是比较像的,数据和url不在一起
  34. int httpCode = http.responseStatusCode();
  35. String response = http.responseBody();
  36. printf(response);
  37. delay(1000);
  38. }

总结:

       非常简单,基本上全部封装到位,只需要简单的调用填参数就行。http中的get和post本质没有区别,只不过在封装的时候考虑了标志,数据的位置,服务器的解析。

6.数据的动态存储和读写

    建议使用官方的esp_eeprom.h这个库,直接在ide中搜索安装,查看示例就会了。 

  1. #include <se_eeprom.h> //这个库包含了arduino.h和eeprom.h
  2. //可以读取1字节到32字节的数据
  3. void setup(){
  4. SE_EEPROM my_eeprom;//建立对象
  5. unsigned short eeprom_size=256;//flash存储区大小
  6. my_eeprom.SetEEPROMSize(256);//申请一个256字节的flash存储区
  7. my_eeprom.WriteEEPROMByte(1, ver);//1到数据区索引1
  8. ver=my_eeprom.ReadEEPROMByte(1);//在数据区索引1读取数据
  9. my_eeprom.WriteEEPROMStr32(64, "Hello World!!!");//写字符串到数据区索引64
  10. Serial.println(my_eeprom.ReadEEPROMStr32(64));//从数据区索引64读取字符串
  11. }
  12. //这个库是毛子写的,可以发现这个库非常好用
  13. //直接搜就可以在ide上搜到
  14. void loop(){
  15. }

7.全局常量定义在flash节省ram空间

  1. //字节和整数
  2. // 保存无符号整型
  3. const PROGMEM uint16_t charSet[] = { 65000, 32796, 16843, 10, 11234};
  4. // 保存字符
  5. const char signMessage[] PROGMEM = {"I AM PREDATOR, UNSEEN COMBATANT. CREATED BY THE UNITED STATES DEPART"};
  6. unsigned int displayInt;
  7. char myChar;
  8. void setup() {
  9. Serial.begin(9600);
  10. while (!Serial); // wait for serial port to connect. Needed for native USB
  11. // put your setup code here, to run once:
  12. // 读回一个2字节长整型
  13. for (byte k = 0; k < 5; k++) {
  14. displayInt = pgm_read_word_near(charSet + k);
  15. Serial.println(displayInt);
  16. }
  17. Serial.println();
  18. // 读回一个字符
  19. int signMessageLength = strlen_P(signMessage);
  20. for (byte k = 0; k < signMessageLength; k++) {
  21. myChar = pgm_read_byte_near(signMessage + k);
  22. Serial.print(myChar);
  23. }
  24. Serial.println();
  25. }
  26. void loop() {
  27. // put your main code here, to run repeatedly:
  28. }
  29. //存储字符串
  30. /*
  31. PROGMEM string demo
  32. How to store a table of strings in program memory (flash),
  33. and retrieve them.
  34. Information summarized from:
  35. http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
  36. Setting up a table (array) of strings in program memory is slightly complicated, but
  37. here is a good template to follow.
  38. Setting up the strings is a two-step process. First, define the strings.
  39. */
  40. #include <avr/pgmspace.h>
  41. const char string_0[] PROGMEM = "String 0"; // "String 0" 等将以表格式存储
  42. const char string_1[] PROGMEM = "String 1";
  43. const char string_2[] PROGMEM = "String 2";
  44. const char string_3[] PROGMEM = "String 3";
  45. const char string_4[] PROGMEM = "String 4";
  46. const char string_5[] PROGMEM = "String 5";
  47. //字符串
  48. // 把字符串放到表中.
  49. const char *const string_table[] PROGMEM = {string_0, string_1, string_2, string_3, string_4, string_5};
  50. char buffer[30]; // 确认能够存储字符串的最大长度
  51. void setup() {
  52. Serial.begin(9600);
  53. while (!Serial); // wait for serial port to connect. Needed for native USB
  54. Serial.println("OK");
  55. }
  56. void loop() {
  57. /* Using the string table in program memory requires the use of special functions to retrieve the data.
  58. The strcpy_P function copies a string from program space to a string in RAM ("buffer").
  59. Make sure your receiving string in RAM is large enough to hold whatever
  60. you are retrieving from program space. */
  61. /*这段话的意思是使用字符串表编程到内存,需要特殊的函数复原数据,而strcpy_P就是把数据从内存拷贝到ram区域,保证ram区有足够的空间。*/
  62. for (int i = 0; i < 6; i++) {
  63. strcpy_P(buffer, (char *)pgm_read_ptr(&(string_table[i]))); // 必要的格式转换和定义
  64. Serial.println(buffer);
  65. delay(500);
  66. }
  67. }
  68. /*ram是程序运行区,flash也就是eeprom就是程序存储区*/
  69. /*大部分程序都是三级流水线*/
  70. //取指:把数据从存储区取出来放到缓存区
  71. //译码:把缓存区的数据解析,它们该去哪?有的去寄存器,有的去堆栈,有的去外设
  72. //执行:把数据放到它应该去的地方,然后晶振一动,数据就被运行,然后pc+1

代码是官网上抄的,官网全英文,不想区去官网看英文的可以看这个。

  官网地址:PROGMEM - Arduino Reference

8.文件的操作(有的开发板不支持,差一些开发板的资料) 

      esp32和esp8266架构支持。毛子的话看不懂,但是代码很清晰简单。

  1. #include <Arduino.h>
  2. #include <FileData.h>
  3. #include <LittleFS.h>
  4. struct Data {
  5. uint8_t val8;
  6. uint16_t val16;
  7. uint32_t val32 = 12345;
  8. char str[20];
  9. };
  10. Data mydata;
  11. FileData data(&LittleFS, "/data.dat", 'B', &mydata, sizeof(mydata));
  12. void setup() {
  13. Serial.begin(115200);
  14. delay(1000);
  15. Serial.println();
  16. LittleFS.begin();
  17. // прочитать данные из файла в переменную
  18. // при первом запуске в файл запишутся данные из структуры
  19. FDstat_t stat = data.read();
  20. switch (stat) {
  21. case FD_FS_ERR: Serial.println("FS Error");
  22. break;
  23. case FD_FILE_ERR: Serial.println("Error");
  24. break;
  25. case FD_WRITE: Serial.println("Data Write");
  26. break;
  27. case FD_ADD: Serial.println("Data Add");
  28. break;
  29. case FD_READ: Serial.println("Data Read");
  30. break;
  31. default:
  32. break;
  33. }
  34. Serial.println("Data read:");
  35. Serial.println(mydata.val8);
  36. Serial.println(mydata.val16);
  37. Serial.println(mydata.val32);
  38. Serial.println(mydata.str);
  39. }
  40. void loop() {
  41. // data.tick(); // вызывать тикер в loop
  42. // можно отловить момент записи
  43. if (data.tick() == FD_WRITE) Serial.println("Data updated!");
  44. // запишем в данные строку из монитора порта
  45. // а также присвоим остальным переменным случайные значения
  46. if (Serial.available()) {
  47. int len = Serial.readBytes(mydata.str, 20);
  48. mydata.str[len] = '\0';
  49. mydata.val8 = random(255);
  50. mydata.val16 = random(65000);
  51. Serial.println("Update");
  52. // отложить обновление
  53. data.update();
  54. }
  55. }

代码地址:GitHub - GyverLibs/FileData: Замена EEPROM для ESP8266/32 для хранения любых данных в файлах

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/1013117
推荐阅读
相关标签
  

闽ICP备14008679号