怎么修改代码才能实现单片机上电后在不接上wifi的情况下就能实现其他方式的控制

stm32f103c8t6单片机,需要连接云平台实现远程控制灯光,现在的问题是必须先接上热点才能实现所有控制方式控制灯光,如果不接上热点功能就无法实现。不知道怎么修改代码才能实现单片机上电后在不接上wifi的情况下就能实现其他方式的控制?能帮修改代码吗

这段信息显示您正在将一个程序上传到一个嵌入式系统中,并提示了两个问题:

  1. 程序存储空间使用情况:该信息显示程序目前使用了2024字节(占用0%),而嵌入式系统最大值为253952字节。这个信息可以帮助您估计程序的大小和程序存储空间的足够性。如果您需要增加程序大小,可以对代码进行优化或者选择更大的嵌入式系统。

  2. avrdude上传错误:该信息显示Arduino IDE在尝试上传程序时无法打开配置文件avrdude.conf,上传失败。这可能是由于Arduino IDE的安装目录或配置文件被改变或删除导致的。您可以尝试重新安装Arduino IDE,或者参考其他文献或者网络资源解决这个问题。

在处理这个问题之前,您可以先检查一下您的程序是否存在编译错误,编译错误可能会导致上传失败。同时,您可以检查一下配置文件是否存在,或者重新安装Arduino IDE来解决上传错误问题。希望这个解答能够帮助到您。

不接wifi那你就用按键控制呗,控制灯光的你写出来了,写个按键的也没什么难的吧,按键按下来改变led引脚的电平

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    答案:

    首先,需要确认您目前使用的是哪种控制方式。若是通过连接 wifi 来实现远程控制,则需要修改代码以实现通过其他方式控制灯光。以下是一些可能的解决方案:

    1.使用RF模块:在单片机上加装 RF 模块,然后在手机App上通过发送RF信号来控制灯光。为实现此方法,需要对 RF 模块的工作原理和通信协议有一定的了解。下面是一个简单的基于STM32的 RF 模块示例代码:

    / RF模块引脚定义 /

    define RF_CS GPIO_Pin_4 / NRF的CS引脚 /

    define RF_CE GPIO_Pin_5 / NRF的CE引脚 /

    define RF_IRQ GPIO_Pin_6 / NRF的IRQ引脚 /

    uint8_t Tx_buffer[32] = {0}; / 发送缓存 / uint8_t Rx_buffer[32] = {0}; / 接收缓存 /

    void RF_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE);
    
    /* Configure GPIO Pins */
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin = RF_CE;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Pin = RF_IRQ;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    /* Configure SPI */
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
    SPI_Init(SPI1, &SPI_InitStructure);
    
    /* Enable SPI */
    SPI_Cmd(SPI1, ENABLE);
    
    /* Configure EXTI */
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6);
    EXTI_InitStructure.EXTI_Line = EXTI_Line6;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_Init(&EXTI_InitStructure);
    
    /* Configure NVIC */
    NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    

    }

    void RF_SendPacket(void) { uint8_t i;

    GPIO_SetBits(GPIOA, RF_CE);
    delay_ms(1);
    GPIO_ResetBits(GPIOA, RF_CS); // 置通信片选符为低电平以启动发送过程
    
    SPI_I2S_SendData(SPI1, 0x20); // 选择发射通道0
    while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) {}
    
    GPIO_SetBits(GPIOA, RF_CE);
    
    for (i = 0; i < 32; i++)
    {
        SPI_I2S_SendData(SPI1, Tx_buffer[i]); // 发送数据包
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) {}
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) {}
        Rx_buffer[i] = SPI_I2S_ReceiveData(SPI1);
    }
    
    GPIO_SetBits(GPIOA, RF_CS); // 结束工作
    

    }

    2.通过蓝牙连接:可以在单片机上加装蓝牙模块,然后在手机App上通过蓝牙连接来控制灯光。在 STM32 的过程中,可以使用 HC-05 蓝牙模块,以下是一个简单的基于 STM32 的 HC-05 蓝牙模块示例代码:

    / 蓝牙引脚定义 /

    define BT_TX GPIO_Pin_9

    define BT_RX GPIO_Pin_10

    void BT_Init(void) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    
    /* Configure GPIO Pins */
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Pin = BT_TX | BT_RX;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART2);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART2);
    
    /* Configure USART */
    USART_InitStructure.USART_BaudRate = 9600;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_Init(USART2, &USART_InitStructure);
    
    USART_Cmd(USART2, ENABLE);
    

    }

    void BT_SendData(uint8_t *data, uint16_t len) { int i;

    for (i = 0; i < len; i++)
    {
        while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
        USART_SendData(USART2, data[i]);
    }
    

    }

    uint8_t BT_GetData(void) { while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET); return USART2->DR & 0xff; }

    3.使用基于声音的控制方式:在灯光附近放置一个麦克风,然后在单片机上加装一个处理声音的模块,比如 MAX9814。然后,可以在手机App上发送指定频率和模式的声音,以实现通过声音控制灯光的功能。

    总之,在修改代码以实现远程控制灯光之前,需要先确定您想要使用哪种控制方式,然后仔细研究相关硬件和通信协议,最后进行代码的修改。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^