🥬FRDM‐K64F开发板 ARM Mbed 在线编译器嵌入式和物联网开发
FRDM-K64F | C/C++ | ARM Mbed | LED | 脉宽调制(PWM) | 光电传感器 | 加速度计 | 磁力计 | SD卡 | 本地文件系统 | 串口 | 串行外设接口SPI | I2C | CAN | 以太网客户端/服务器 | TCP/UDP | WebSockets | WiFi | 低通滤波器 (LPF) | 高通滤波器 (HPF) | 带通滤波器 (BPF) | 带阻滤波器和陷波滤波器 | 快速傅里叶变换FFT | PID控制器 | 灯控声控 | RFID读取器 | 信号处理
传感器和执行器
传感器是将物理参数转换为电输出的设备。 传感器是换能器的一种。 传感器可分为模拟传感器和数字传感器。 模拟传感器以电压和电流的形式提供输出。 微控制器需要 ADC(模数转换器)读取来自模拟传感器的数据。 许多较新的传感器都是数字传感器,即它们使用 I2C(内部集成电路)、SPI(串行外设接口)和 UART(通用异步接收器)等协议以数字格式提供输出。
执行器是将电信号转换为物理输出(即运动)的设备。 执行器可以通过电压或电流、气动或液压、甚至人力来控制。 在嵌入式系统中,执行器主要由电力控制。 当接收到控制信号时,执行器将电能转换为机械运动。 执行器可以产生线性运动、旋转运动或振荡运动。 执行器的示例包括电动机、压电致动器、气动致动器、步进电机和门锁致动器等。
通讯
除了以太网、WiFi、蓝牙等传统通信技术外,还有许多其他技术可用于物联网通信。
- RFID 和 NFC(近场通信) 
- 低功耗蓝牙 (BLE) 
- 光保真 (LiFi) 
- 6LoWPAN 
- ZigBee 
- Z‐Wave 
- LoRa 
协议
- HTTP 
- WebSocket 
- MQTT 
- CoAP 
- XMPP 
Node-RED
Node-RED是IBM开发的基于Web的开源软件工具,可用于通过互联网连接硬件设备。借助 Node-RED,您可以将 mbed 开发板连接到互联网,读取传感器值,将其显示在图表、网页、电子邮件等消息中。 您还可以将命令发送回开发板以执行一些控制。 它是一种基于图形的编程工具,使用称为节点的功能块来构建程序。 您所需要做的就是连接节点并配置它们。 这使得许多编程任务变得非常简单且易于实现。 图 3.4 显示了在 Node-RED 中实现的一个简单的基于 WebSocket 的聊天程序。
嵌入式代码开发
- 初始代码:闪烁 LED 
- 拓展代码 - 控制继电器 
- 屏载 QWERTY 触摸键盘的 TFT 显示屏演示 
- SDFileSystem 替代 LocalFileSystem 写入 SD 卡 
- 挤出机/热床PID控制 
- 使用 Steinhart-Hart 方程进行热敏电阻到温度转换的演示 
- 光传感器示例 
- 温湿度传感器示例 
- USB HID 鼠标/键盘示例 
- HTTP SD 卡文件服务器 
- 使用整流器和低通滤波器对数字包络检波器进行测试 
- 使用 Python 编写的 GUI 软件从电脑控制 FRDM-K64F板 
- 2 个线程的矩阵乘法 
- 光和温度控制 
- 使用 mbed websocket 发送由字母和数字组成的消息控制RGB LED 
- 有限状态机 
- 数据记录器每隔几秒读取一次温度、湿度和光照水平,并将数据存储在 microSD 卡中 
 
数字输入输出
- 使用按钮和 PIR 传感器 
数字输入示例:
#include "mbed.h"
DigitalIn  mypin(SW2); // change this to the button on your board
DigitalOut myled(LED1);
int main()
{
    // check mypin object is initialized and connected to a pin
    if (mypin.is_connected()) {
        printf("mypin is connected and initialized! \n\r");
    }
    // Optional: set mode as PullUp/PullDown/PullNone/OpenDrain
    mypin.mode(PullNone);
    // press the button and see the console / led change
    while (1) {
        printf("mypin has value : %d \n\r", mypin.read());
        myled = mypin; // toggle led based on value of button
        ThisThread::sleep_for(250);
    }
}#include "mbed.h"
DigitalIn a(D0);
DigitalIn b(D1);
DigitalOut z_not(LED1);
DigitalOut z_and(LED2);
DigitalOut z_or(LED3);
DigitalOut z_xor(LED4);
int main()
{
    while (1) {
        z_not = !a;
        z_and = a && b;
        z_or = a || b;
        z_xor = a ^ b;
    }
}
数字输出示例:
#include "mbed.h"
DigitalOut myled(LED1);
int main()
{
    // check that myled object is initialized and connected to a pin
    if (myled.is_connected()) {
        printf("myled is initialized and connected!\n\r");
    }
    // Blink LED
    while (1) {
        myled = 1;          // set LED1 pin to high
        printf("myled = %d \n\r", (uint8_t)myled);
        ThisThread::sleep_for(500);
        myled.write(0);     // set LED1 pin to low
        printf("myled = %d \n\r", myled.read());
        ThisThread::sleep_for(500);
    }
}批量输入示例:
#include "mbed.h"
BusIn nibble(D0, D1, D2, D3); // Change these pins to buttons on your board.
int main()
{
    // Optional: set mode as PullUp/PullDown/PullNone/OpenDrain
    nibble.mode(PullNone);
    while (1) {
        // check bits set in nibble
        switch (nibble & nibble.mask()) { // read the bus and mask out bits not being used
            case 0x0:
                printf("0b0000, D3,D2,D1,D0 are low  \n\r");
                break;
            case 0x1:
                printf("0b0001,          D0  is high \n\r");
                break;
            case 0x2:
                printf("0b0010,       D1     is high \n\r");
                break;
            case 0x3:
                printf("0b0011,       D1,D0 are high \n\r");
                break;
            case 0x4:
                printf("0b0100,    D2        is high \n\r");
                break;
            case 0x5:
                printf("0b0101,    D2,  ,D0 are high \n\r");
                break;
            case 0x6:
                printf("0b0110,    D2,D1    are high \n\r");
                break;
            case 0x7:
                printf("0b0111,    D2,D1,D0 are high \n\r");
                break;
            case 0x8:
                printf("0b1000, D3           is high \n\r");
                break;
            // ...
            case 0xF:
                printf("0b1111, D3,D2,D1,D0 are high \n\r");
                break;
        }
        ThisThread::sleep_for(1000);
    }
}
模拟输入输出
- 使用温度传感器和 LDR(光敏电阻) 传感器 
脉冲宽度调制
加速度计和磁力计
SD卡读写
本地文件系统
中断
数字接口
串口、SPI、I2C、CAN
网络通讯
以太网、以太网网络客户端和服务器、TCP和UDP套接字、WebSocket、WiFi
数字信号处理
低通滤波器、高通滤波器、带通滤波器、带阻滤波器和陷波滤波器、快速傅里叶变换、PID控制器
多线程和实时编程
物联网开发项目示例
网络监控温度、智能灯控、声控门禁、RFID读取器、云端数据分析和可视化示例、实时信号处理
Last updated
Was this helpful?
