授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。

QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷

一、你如果想学基于Arduino的ESP8266开发技术

一、基础篇

  1. ESP8266开发之旅 基础篇① 走进ESP8266的世界
  2. ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境
  3. ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明
  4. ESP8266开发之旅 基础篇④ ESP8266与EEPROM
  5. ESP8266开发之旅 基础篇⑤ ESP8266 SPI通信和I2C通信
  6. ESP8266开发之旅 基础篇⑥ Ticker——ESP8266定时库

二、网络篇

  1. ESP8266开发之旅 网络篇① 认识一下Arduino Core For ESP8266
  2. ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库
  3. ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用
  4. ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用
  5. ESP8266开发之旅 网络篇⑤ Scan WiFi——ESP8266WiFiScan库的使用
  6. ESP8266开发之旅 网络篇⑥ ESP8266WiFiGeneric——基础库
  7. ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client
  8. ESP8266开发之旅 网络篇⑧ SmartConfig——一键配网
  9. ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用
  10. ESP8266开发之旅 网络篇⑩ UDP服务
  11. ESP8266开发之旅 网络篇⑪ WebServer——ESP8266WebServer库的使用
  12. ESP8266开发之旅 网络篇⑫ 域名服务——ESP8266mDNS库
  13. ESP8266开发之旅 网络篇⑬ SPIFFS——ESP8266 Flash文件系统
  14. ESP8266开发之旅 网络篇⑭ web配网
  15. ESP8266开发之旅 网络篇⑮ 真正的域名服务——DNSServer
  16. ESP8266开发之旅 网络篇⑯ 无线更新——OTA固件更新

三、应用篇

  1. ESP8266开发之旅 应用篇① 局域网应用 ——炫酷RGB彩灯
  2. ESP8266开发之旅 应用篇② OLED显示天气屏
  3. ESP8266开发之旅 应用篇③ 简易版WiFi小车

四、高级篇

  1. ESP8266开发之旅 进阶篇① 代码优化 —— ESP8266内存管理
  2. ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266配置
  3. ESP8266开发之旅 进阶篇③ 闲聊 ESP8266 Flash
  4. ESP8266开发之旅 进阶篇④ 常见问题 —— 解决困扰
  5. ESP8266开发之旅 进阶篇⑤ 代码规范 —— 像写文章一样优美
  6. ESP8266开发之旅 进阶篇⑥ ESP-specific APIs说明

1.前言

    在初步认识什么是Arduino之后,我们就开始讲解一下Arduino语言基础,我们需要知道到底Arduino提供了什么平台以及什么语言来让我们做开发(技术基本上都是先学习开发语言)。

2.Arduino语言以及程序结构

    Arduino使用C/C++语言编写程序(绝大部分的程序员大学都学了这个)。C语言是一种面向过程的编程语言,C++是一种面向对象的编程语言(虽然楼主已经忘光了这个)。早期Arduino核心库使用C语言编写,后来引进了面向对象的思想,目前最新核心库采用C与C++混合编程。
    通常所说的Arduino语言,就是指Arduino核心库提供的各种API的集合。这些API是对更底层的单片机支持库进行二次封装所形成的(玩过单片机的人估计都是经常和各种寄存器打交道)。Arduino提供的API可以让初学者不用理会单片机复杂寄存器配置,然后就能直观控制Arduino,提高开发效率。
    Arduino程序的基本结构如下:

void setup() {
  // put your setup code here, to run once(这里代码只运行一次):

}

void loop() {
  // put your main code here, to run repeatedly(这里代码不断运行):

}

    这个模型可以这样理解(估计学过c语言的都知道main):

int main() {
    setup() ;
    while(1) {
        loop() ;
    }
}

3.语言基础

    对于学过C语言的人,可以直接大概扫描一下。

3.1 数据类型

3.1.1 常量

    程序运行中,值不能改变,常量可以是字符,也可以是数字,语句:

#define 常量名  常量值

    例子:一般人都要用到调试功能(这里我个人是用串口),但是在真正最终代码的时候又想关闭调试功能,那么就可以这么用:

#define MyDebugSerial Serial

//该条语句用于使能DEBUG输出信息,屏蔽掉就不会输出debug调试信息
#define DEBUG

#ifdef DEBUG
#define DBGLN(message)    MyDebugSerial.println(message)
#else
#define DBGLN(message)
#endif

void setup() {
  MyDebugSerial.begin(9600);
  DBGLN("setup end");
}

void loop() {

}

3.1.2 变量

    程序中可变的值称为变量。

3.1.2.1 整型

    Arduino可使用的整数类型以及取值范围如下:

    而在Arduino Due中,int型以及unsigned int型占用4字节(32位Arm处理器)。

3.1.2.2 浮点型

    float double 实数,两者精度一样,都占有4字节(32位)内存空间,在Arduino Due中,double类型占用8字节(64位)内存空间。

3.1.2.3 字符型

    char类型,占用1字节,字符需用单引号引用,如:char data = ‘c’;

3.1.2.4 布尔型

    boolean类型,只有两个:false和true,占用1字节内存空间。

3.1.2.5 数组

    int a[5],char b[6],注意不要数组溢出,数组下标从0开始编号。

3.1.2.6 字符串

    char 字符串名称[字符个数]或者 String 字符串名称,我个人是喜欢String。

3.1.3 常见运算符

3.1.4 三大组织结构

3.1.4.1 顺序结构

    程序语句按先后顺序依次执行。

3.1.4.2 选择结构

    根据判断以决定下一步操作。

形式1(单分支):

if(表达式){
    语句;
}

形式2(双分支):

if(表达式1){
    语句1;
}else{
    语句2;
}

形式3(多分支):

if(表达式1){
    语句1;
}else if(表达式2){
    语句2;
}else if(表达式3){
    语句3;
}

形式4(超多分支,一般超过4个):

switch(){
   case 常量表达式1:
          语句1;
          break;
   case 常量表达式2:
          语句2;
          break;
   case 常量表达式3:
          语句3;
          break;
     ......
     default:
          语句n;
          break;
}

注意
switch后的表达式的结果只能是整型或字符型,如果使用其他类型,则必须使用if语句。switch结构会将switch语句后的表达式与case后的常量表达式比较,如果相符就运行常量表达式所对应的语句;如果都不相符,则会运行default后的语句;如果不存在default部分,程序就直接退出switch结构。一般要使用break语句退出switch结构,如果没有使用break语句,则程序一直执行到有break的位置才退出或者运行完该switch结构退出。

3.1.4.3 循环结构

    重复结构,反复执行某一部分代码,while(当)循环和until(直到)循环。

    while型循环结构会先判断给定条件,当给定条件不成立,则退出该结构,当给定条件成立,继续执行A,如此反复;
    until型循环结构会先执行A,然后判断给定条件是否成立,若成立立即退出循环,不成立则继续执行A,如此反复;

    while循环形式:

while(表达式){
   语句;
}

    until循环形式:

do{
  语句;
}while(表达式);

    for循环形式:

for(表达式1;表达式2;表达式3){
   语句;
}

    循环结构中都有一个表达式用于判断是否进入循环,但有时候需要提前结束循环或者跳过某次循环,则使用break和continue实现;

  • break 终止当前选择结构或者循环结构
  • continue 跳过本次循环中剩下的语句

4.总结

    大概Arduino语法基础就讲到这里(有c语言基础的人直接扫描一下就可以了,毕竟语言是相通的),接下来我准备开始讲解实战,敬请期待。

Arduino学习笔记② Arduino语言基础的更多相关文章

  1. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  2. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

  3. MySQL学习笔记_8_SQL语言基础复习

    SQL语言基础复习 一.概述 SQL语句注释方式 1)以"#"开头直到行尾的所有内容都是注释 2)以"--"(--后还有一个空格)开头直到行尾的所有内容都是注释 ...

  4. [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组

    1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一 ...

  5. [java学习笔记]java语言基础概述之运算符&程序流程控制&for循环嵌套

    一.运算符 算数运算符 +,-,*,/,%,++,-- 1.+,-,*,/ 整数除以整数的结果为舍弃了小数部分的整数. 2.%:取余 %左右都为正数,左边小于右边结果为左边值,如,4%5=4 %左边大 ...

  6. [java学习笔记]java语言基础概述之标识符&关键字&注释&常量和变量

    一.标识符 在程序中自定义的一些名称 由26个英文字母的大小写,数字,_$组成 定义合法标识符的规则: 不能以数字开头 不能使用关键字 java严格区分大小写 注意:在起名字时,为了提高阅读性,必须得 ...

  7. [java学习笔记]java语言基础概述之内存的划分&堆和栈

    1.内存的划分 1.寄存器 cpu处理 2.本地方法区 和所在系统相关 3.方法区 方法加载进内存,其实就是开辟了一块该方法的方法区 方法区中还可以有静态区,用于存放静态变量(类变量) 4.栈内存 5 ...

  8. [java学习笔记]java语言基础概述之函数的定义和使用&函数传值问题

    1.函数 1.什么是函数? 定义在类中的具有特定功能的一段独立小程序. 函数也叫做方法 2.函数的格式 修饰符   返回值类型    函数名(参数类型  形式参数1, 参数类型  形式参数2-) { ...

  9. [java学习笔记]java语言基础概述之转义字符&break&continue

    1.转义字符 \t:制表符 \n:回车 \b:退格 \r:回车 \":双引号 \\:反斜线(常用于文件路径的书写中)   windows系统中回车符其实是由两个符号组成的,\r\n linu ...

随机推荐

  1. UVM——寄存器模型相关的一些函数

    0. 引言 在UVM支持的寄存器操作中,有get.update.mirror.write等等一些方法,在这里整理一下他们的用法. 寄存器模型中的寄存器值应该与DUT保持同步,但是由于DUT的值是实时更 ...

  2. C#操作SQLServer的一个简单封装

    class DBHandler { //SqlConnection数据库连接对象 private SqlConnection localConnection = null; //构造函数中初始化连接对 ...

  3. WordPress 文章插入的超链接访问不了

    这两天学习WordPress的时候,想着插入超链接直接访问地址,但是没成功.比如添加一个百度的超链接点击之后,就会变成 https://网站域名/go/?url=http://www.baidu.co ...

  4. 使用Shell脚本编译运行C++源码 输入输出重定向

    在写C++控制台程序的时,如果使用Xcode或者Visual Studio之类的IDE,需要创建许多工程,会造成很多不便.有时,采用Vim或者Sublime text等编辑器编写简单的控制台程序能节省 ...

  5. Maven 梳理 - maven新建web项目提示"javax.servlet.http.HttpServlet" was not found on the Java Build Path

    方法一: <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api&l ...

  6. MySQL数据库从复制及企业配置实践

    在实际生产中,数据的重要性不言而喻: 如果我们的数据库只有一台服务器,那么很容易产生单点故障的问题,比如这台服务器访问压力过大而没有响应或者奔溃,那么服务就不可用了,再比如这台服务器的硬盘坏了,那么整 ...

  7. MySQL InnoDB如何保证事务特性

    如果有人问你"数据库事务有哪些特性"?你可能会很快回答出原子性.一致性.隔离性.持久性即ACID特性.那么你知道InnoDB如何保证这些事务特性的吗?如果知道的话这篇文章就可以直接 ...

  8. 手把手教你如何在window下将jenkins+allure集成生成的测试报告通过jenkins配置邮箱自动发送-04(非常详细,非常实用)

    简介 上一篇生成测试报告,小伙伴们和童鞋们就又问道,测试报告已经生成了,怎么发送给相关的负责人了?小伙伴们和童鞋们不要着急,听宏哥慢慢给你道来,心急吃不了热豆腐哈.今天这篇文章宏哥就给小伙伴和童鞋们来 ...

  9. 整理一些大厂的开源平台及github,向他们看齐...

    有人苦恼,该如何突破技术的局限性... 有人羡慕,技术上你怎么懂得这么多... 有人哀叹,唉,我已经学不动了... 我的总结(纯属个人想法):身处IT,就得不断学习和积累,才不会被狠狠地甩在身后.什么 ...

  10. 5G 时代,云计算迎来新风口

    云计算是对传统IT模式从底层硬件到业务模式的颠覆,传统IT市场具备万亿级市场空间,目前云计算收入占IT支出占比尚小,渗透率较低,未来空间较大. 短期受到宏观经济等因素影响,云巨头资本开支增速有所波动, ...