Pantalla de información de la página de inicio de aprendizaje de la aplicación basada en escenarios de HaaS EDU

1. Introducción al experimento

Este experimento presenta principalmente la realización de la pantalla de información de la página de inicio. Como primera página, la información de la página de inicio implementa una interfaz similar a un teléfono móvil, que contiene contenido enriquecido.

1 ) Nombre del producto

2) Información de la versión

3) Estado del sistema, hora del sistema, conexión WIFI, conexión Bluetooth.

4) dirección IP

 

efecto de pantalla

El efecto de visualización de la interfaz es el siguiente:

 

Este experimento contiene mucho contenido. A través del estudio de este experimento, puede aprender muchos puntos de conocimiento, como la pantalla de la unidad OLED, ADC para obtener información de energía, el estado de la conexión Wi-Fi, etc.

 

2. Involucrar puntos de conocimiento

  • Configuración y uso de ADC
  • Uso de OLED
  • Red de distribución Wi-Fi
  • Adquisición del reloj del sistema (sincronización de la hora de la red NTP)

 

3. Preparación del entorno de software y hardware

3.1, hardware

Una placa de desarrollo HaaS EDU K1.

Todos los módulos mencionados anteriormente ya están incluidos en nuestra placa EDU.

 

3.2 Software

Todos los códigos de la pantalla de información de la página de inicio se han implementado e incluido en la versión de lanzamiento, que se puede ver cada vez que se reinicia el sistema.

 

3.2.1, versión de firmware

Número de versión: VER 1.0.0

 

3.2.2, ruta de código

Código de descarga

git clone https://github.com/alibaba/AliOS-Things.git -b dev_3.1.0_haas

Para los usuarios domésticos, para evitar una descarga lenta desde github, puede descargar desde gitee.

git clone https://gitee.com/alios-things/AliOS-Things.git -b dev_3.1.0_haas

 

Compilar

Ingrese el directorio de nivel superior del código, como AliOS-Things, para compilarlo. Puede compilar directamente la aplicación de demostración en el directorio application / example / o la aplicación desarrollada por usted mismo. Tome la compilación de helloworld_demo como ejemplo a continuación.

aos make distclean

aos make edu_demo@haaseduk1 -c config

aos make

 

Las rutas relativas de los archivos necesarios en la pantalla de inicio son las siguientes:

application / example / edu_demo / k1_apps / homepage / homepage.c

application / example / edu_demo / k1_apps / homepage / homepage.h

 

Método de quema

Ver el capítulo de entorno de desarrollo

 

3.2.3, empezar

Visualización del número de versión

El número de versión se muestra en el medio de la pantalla.

El formato es VER: xxx

 

Configurar Wi-Fi

Formato de línea de comando que se usa actualmente para la configuración de Wi-Fi

Por ejemplo, el nombre de Wi-Fi actual es haas-open y la contraseña es 12345678.

 netmgr - t wifi - c haas - abierto 12345678

Después de conectarse, se mostrará la dirección IP obtenida, como se muestra en la siguiente figura:

Pantalla de potencia

El nivel de la batería se mostrará en el icono en la esquina superior derecha, dividido en cinco niveles.

 

4. Introducción a cada experimento

4.1, desarrollo y visualización OLED

4.1.1 Introducción al fondo OLED

OLED , es decir, diodo emisor de luz orgánico (diodo emisor de luz orgánico), también conocido como pantalla de electroluminiscencia orgánica (OELD). OLED tiene excelentes características como auto-luminosa, sin luz de fondo, alto contraste, espesor delgado, amplio ángulo de visión, velocidad de respuesta rápida, se puede utilizar para paneles flexibles, amplio rango de temperatura de funcionamiento, estructura simple y proceso de fabricación, etc. Se considera para ser la tecnología de aplicación emergente de pantalla plana de próxima generación.

Los LCD requieren retroiluminación, pero los OLED no, porque son auto-luminosos. Para la misma pantalla, el efecto OLED debería ser mejor. Con la tecnología actual, es difícil aumentar el tamaño de los OLED, pero la resolución puede ser muy alta.

 

4.1.2, diseño de hardware

En este experimento, el OLED se fija en el panel frontal como una placa pequeña y el medio se conecta a la placa principal a través de un cable.

La pantalla OLED utilizada en este experimento tiene las siguientes características:

1 ) El módulo es una pantalla monocromática con caracteres blancos sobre fondo negro.

2 ) El tamaño de la pantalla es de 1,3 pulgadas.

3 ) Alta resolución, la resolución de este módulo es 132 * 64

4 ) La interfaz de hardware adopta la interfaz de bus SPI

 

Apariencia de OLED a bordo:

Dibujo de contorno OLED

El diagrama esquemático es el siguiente:

         

Esquema parcial de EDU OLED

4.1.3, diseño de software

Para obtener información detallada sobre la introducción y el uso de OLED, consulte el Capítulo 3 OLED. Aquí presentamos principalmente cómo usarlo De acuerdo con el diagrama esquemático, el SPI0 de la placa base conectada al OLED adopta el modo SPI de 4 cables.

 

inicialización

Primero inicialice SPI0, esto se puede encontrar en la función de entrada total:

application / example / edu_demo / app_entry.c

sh1106_init();

La inicialización sh1106_init incluye la inicialización SPI0 y la inicialización GPIO.

uint8_t sh1106_init(void)

{

    uint8_t err_code;

    err_code = hardware_init();

    if (err_code != 0)

    {

        return err_code;

    }

    command_list();

    return err_code;

}

Parte de la pantalla

El código se encuentra en application / example / edu_demo / k1_apps / homepage / homepage.c

Tome la información de la versión de la pantalla como ejemplo:

OLED_Clear(); // 清屏函数      

OLED_Show_String(40, (12 + 4) * 1, "HaaS EDU", 12, 1); / 将字符串填入显示缓存

snprintf(image_version, 21, "VER: %s", BUILD_VERSION); // 格式化字符串

OLED_Show_String(33, (12 + 4) * 2, image_version, 12, 1); // 将格式化后的字符串-

                                                                                                                    //版本信息填入缓存

OLED_Refresh_GRAM(); // 刷新显存到屏幕上

4.2, operación ADC y adquisición de energía

4.2.1. Introducción a los antecedentes

ADC , o conversor de analógico a digital (inglés: conversor de analógico a digital), es un tipo de dispositivo que se utiliza para convertir señales continuas en forma analógica en señales discretas en forma digital. El dispositivo opuesto se llama convertidor de digital a analógico (DAC).

Un convertidor típico de analógico a digital convierte una señal analógica en una señal digital que representa un cierto valor de voltaje proporcional. Sin embargo, algunos convertidores de analógico a digital no son dispositivos puramente electrónicos, como los codificadores rotativos, que también pueden considerarse convertidores de analógico a digital.

4.2.2, diseño de hardware

El diagrama esquemático es el siguiente:

 

La detección de voltaje principalmente debe prestar atención a los siguientes puntos:

1. La detección de voltaje utiliza el canal GADC1 del MCU.

2. Con la fuente de alimentación USB, el voltaje en el punto de detección es constante entre 4.8 V y 5.2 V. Cuando se cambia a la fuente de alimentación de la batería (cuando la fuente de alimentación USB está desconectada), el voltaje flota entre 3.65 V y 4.2 V. Variedad.

3. Debido al rango limitado de GADC, la detección de voltaje adopta la división de frecuencia. Como se muestra en el diagrama esquemático, el valor real medido de ADC es aproximadamente 1/3 de VOLT, más la pérdida de resistencia interna de ADC, la relación real es 3.208.

 

4.2.3, diseño de software

Inicialización del controlador

adc_dev_t adc = {1, 1000, 0x12345678};   //初始化ADC1

ret = hal_adc_init(&adc);

if (ret)

{

  printf("\r\n=====adc test : adc init failed===\r\n");

  return -1;

}

Obtener valor de voltaje

1. Leer diez veces,

2. Quite los valores máximo y mínimo y luego tome el promedio

 for (int32_t i = 0; i < 10; i++)

    {

        hal_adc_value_get(&adc, &output, 200);

        test_sum += output;



        /* the min sampling voltage */

        if (test_min >= output)

        {

            test_min = output;

        }

        /* the max sampling voltage */

        if (test_max <= output)

        {

            test_max = output;

        }

        osDelay(1);

    }



    hal_adc_finalize(&adc);



    test_avrg = (test_sum - test_min - test_max) >> 3;

    //printf("\r\n=====adc test : the samping volage is:%dmv===\r\n", test_avrg);

    test_avrg *= 3.208;

    *volage = test_avrg;

Devolver el nivel de la batería

El valor de voltaje real es ADC * 3.208 y luego regresa a diferentes niveles de acuerdo con este valor, que se dividen principalmente en cinco niveles, que son 0%, 25%, 50
%, 75% y 100%.

 if (test_avrg > 4100)

    {

        *level = 4;

    }

    else if ((test_avrg > 3980) && (test_avrg < 4100))

    {

        *level = 3;

    }

    else if ((test_avrg > 3850) && (test_avrg < 3980))

    {

        *level = 2;

    }

    else if ((test_avrg > 3700) && (test_avrg < 3850))

    {

        *level = 1;

    }

    else if (test_avrg < 3700)

    {

        *level = 0;

    }

Muchas personas que ven el código pueden preguntarse por qué 4100 mV a 4200 mV representan el 100% y 4100 mV a 3980 mV representan el 75%, que no es un valor lineal. De hecho, la razón es muy simple, la curva de descarga de la batería de las baterías de litio no es lineal.

 

Icono de pantalla

Los códigos para mostrar diferentes iconos de batería monocromáticos son los siguientes:

if (0 == get_battery(&battery_level))

{

  //printf("get_battery success %d\n", battery_level);

  OLED_Icon_Draw(110, 0, &icon_battery_20_12[battery_level], 0);

}

4.3. Sincronización de tiempo de red y Wi-Fi del sistema

4.3.1. Introducción a los antecedentes

Wifi

El término Wi-Fi debe ser familiar para todos y es sinónimo de redes. En pocas palabras, Wi-Fi (WirelessFidelity) es un estándar de transmisión de red. Al igual que la tecnología Bluetooth, pertenece a la tecnología inalámbrica de corto alcance. Con la popularización de las aplicaciones de red, ha brindado una gran comodidad a las personas y se ha utilizado ampliamente. Wi-Fi nos permite navegar por Internet en cualquier momento y en cualquier lugar.

A menudo veo palabras como 802.11b / g / n 2.4Ghz en el empaque de los enrutadores, entonces, ¿de qué viene esto? Este es un estándar para la comunicación de red inalámbrica. IEEE 802.11 es un estándar común para las redes inalámbricas de área local en la actualidad. Está definido por el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE). Los siguientes sufijos son los números de versión de la iteración del protocolo.

 

Banda de 2,4 GHz

  • La radio Wi-Fi 802.11b / g / n Zhongguidong puede transmitir en la banda de frecuencia de 2.4 GHz, con un total de 14 canales disponibles, y el rango de frecuencia de trabajo es de 2.402GHz-2.483Ghz. 13 canales (1-13) están disponibles en China. El ancho de banda entre cada dos canales adyacentes es de 5Mhz. Si se utiliza el canal 1 y el ancho de banda es de 20 Mhz, los canales 2, 3, 4 y 5 están ocupados.
  • El ancho de banda de cada canal es de 22 MHz, pero el ancho de banda efectivo es de solo 20 MHz. Para reducir la interferencia de los canales adyacentes, se reservan límites de ancho de banda de 1 MHz en ambos lados.
  • Solo tres canales (1, 6 y 11) no comparten espacio de frecuencia.

 

Banda de 5 GHz

  • Las radios Wi-Fi 802.11a / n / ac se pueden transmitir en la banda de frecuencia de 5 GHz, con un total de 25 canales disponibles. El rango de frecuencia central es 5.150GHz-5.850GMz. Los canales disponibles en China incluyen canales bajos 36, 40, 44, 48, 52, 56, 60, 64 y canales altos 149, 153, 157, 161, 165. No hay superposición entre canales.
  • Cada ancho de banda es de 20 MHz. Si se utiliza el canal 149, cuando se va a utilizar 80 MHz, se deben ocupar 153, 157 y 161.

 

Adquisición del reloj del sistema (sincronización de la hora de la red SNTP)

La hora actual del sistema se muestra en la esquina superior izquierda de la interfaz. HaaS EDU K1 no tiene un chip RTC, por lo que la hora no se puede guardar automáticamente.

Entonces, ¿cómo obtener la hora exacta? Aquí debe utilizar el protocolo SNTP, SNTP se basa en el protocolo NTP.

 

Protocolo SNTP

El protocolo de tiempo de red simple, adaptado de NTP, se utiliza principalmente para sincronizar los relojes de las computadoras en Internet. Definido en RFC2030.

El protocolo SNTP adopta un modo de trabajo cliente / servidor y puede funcionar en modo unidifusión (punto a punto) o difusión (punto a multipunto). El servidor SNTP recibe señales GPS o su propio reloj atómico como referencia de hora del sistema. En el modo de unidifusión, el cliente SNTP puede obtener información de hora precisa al acceder regularmente al servidor SNTP, que se utiliza para ajustar la hora del sistema donde se encuentra el cliente para lograr el propósito de la sincronización horaria. En el modo de difusión, el servidor SNTP envía mensajes periódicamente a la dirección IP de unidifusión o dirección IP de multidifusión especificada. El cliente SNTP obtiene información de tiempo escuchando estas direcciones.

 

4.3.2, diseño de hardware

El módulo Wi-Fi utilizado en este experimento ya está incluido en la MCU y no requiere ninguna disposición adicional.

 

4.3.3, diseño de software

Módulo wifi

La parte Wi-Fi de AliOS Things se ha encapsulado en netmgr y edu_demo se ha inicializado de forma predeterminada.

El código se encuentra en application / example / edu_demo / app_entry.c

netmgr_init();

netmgr_start(true);

aos_register_event_filter(EV_WIFI, wifi_service_event, NULL);

netmgr_init inicia tareas relacionadas con wifi_service. Incluye la inicialización del hardware Wi-Fi y la inicialización del módulo wifi_service.

netmgr_start vuelve a iniciar la tarea de conexión automática de Wi-Fi.

aos_register_event_filter (EV_WIFI, wifi_service_event, NULL); aquí está la función de devolución de llamada que registró wifi_event.

 

Usar Wi-Fi

Actualmente, el nombre de WI-FI (SSID) y la contraseña se pueden configurar en EDU a través de la configuración del código o la configuración de la línea de comandos.

Como la línea de comando

netmgr -t wifi -c haas-open 12345678

Una vez que la conexión sea exitosa, se guardará automáticamente en el sistema de archivos. Si la nueva conexión WIFI falla o se vuelve a encender, se conectará automáticamente de nuevo a la WIFI.

 

Sincronización de hora de red (SNTP)

Una vez que edu esté conectado a la red, obtendrá automáticamente la hora de la red. Y actualice al reloj local.

Si necesita obtener la hora del sistema en este momento, simplemente llame a la función del sistema clock_gettime directamente.

struct tm *info;

struct timespec tv;



/* 获取 GMT 时间 */

clock_gettime(CLOCK_REALTIME, &tv);

info = gmtime(&tv);



snprintf(tmp, 21, "%2d:%02d", (info->tm_hour + 8) % 24, info->tm_min);

OLED_Show_String(0, 12 * 0, tmp, 12, 1);

 

5. Asistencia técnica para desarrolladores

Si necesita más soporte técnico, puede unirse al grupo de desarrolladores de DingTalk o seguir la cuenta pública de WeChat

Para obtener más información sobre tecnología y soluciones, visite la página de inicio de Aliyun AIoT https://iot.aliyun.com/

Supongo que te gusta

Origin blog.csdn.net/HaaSTech/article/details/114003904
Recomendado
Clasificación