Compare commits

..

6 Commits

Author SHA1 Message Date
56a58fca79 display init function 2021-08-13 07:23:48 +02:00
32a71e956f reorganize files 2021-08-13 07:15:43 +02:00
8057e659a3 add centered text 2021-08-13 06:05:55 +02:00
908ecfc1d7 add variable spacing and scalable font 2021-08-13 06:05:13 +02:00
c4519fd92f change pixels in font 2021-08-13 06:03:35 +02:00
5232d4c089 add proportional font 2021-08-12 04:29:51 +02:00
7 changed files with 312 additions and 437 deletions

74
main/display.c Normal file
View File

@@ -0,0 +1,74 @@
#include "driver/gpio.h"
#include "display.h"
uint8_t fb[64][128][3];
void write_bits(uint8_t r1, uint8_t g1, uint8_t b1, uint8_t r2, uint8_t g2, uint8_t b2){
gpio_set_level(GPIO_R1, r1);
gpio_set_level(GPIO_G1, g1);
gpio_set_level(GPIO_B1, b1);
gpio_set_level(GPIO_R2, r2);
gpio_set_level(GPIO_G2, g2);
gpio_set_level(GPIO_B2, b2);
}
void write_address(uint8_t addr){
gpio_set_level(GPIO_A, addr&0x01);
gpio_set_level(GPIO_B, (addr&0x02)>>1);
gpio_set_level(GPIO_C, (addr&0x04)>>2);
gpio_set_level(GPIO_D, (addr&0x08)>>3);
gpio_set_level(GPIO_E, (addr&0x10)>>4);
}
void latch(){
gpio_set_level(GPIO_LAT, 0);
gpio_set_level(GPIO_LAT, 1);
}
void clock(){
gpio_set_level(GPIO_CLK, 1);
gpio_set_level(GPIO_CLK, 0);
}
void display_init(){
gpio_config_t io_conf;
//disable interrupt
io_conf.intr_type = GPIO_INTR_DISABLE;
//set as output mode
io_conf.mode = GPIO_MODE_OUTPUT;
//bit mask of the pins that you want to set,e.g.GPIO18/19
io_conf.pin_bit_mask =
(1ULL<<GPIO_LAT)|(1ULL<<GPIO_OE)|(1ULL<<GPIO_CLK)
|(1ULL<<GPIO_R1)|(1ULL<<GPIO_G1)|(1ULL<<GPIO_B1)|(1ULL<<GPIO_R2)|(1ULL<<GPIO_G2)|(1ULL<<GPIO_B2)
|(1ULL<<GPIO_A)|(1ULL<<GPIO_B)|(1ULL<<GPIO_C)|(1ULL<<GPIO_D)|(1ULL<<GPIO_E);
//disable pull-down mode
io_conf.pull_down_en = 0;
//disable pull-up mode
io_conf.pull_up_en = 0;
//configure GPIO with the given settings
gpio_config(&io_conf);
gpio_set_level(GPIO_OE, 0);
write_bits(0,0,0,0,0,0);
for(uint8_t i=0;i<128;i++){
clock();
}
latch();
gpio_set_level(GPIO_OE, 1);
gpio_set_level(GPIO_OE, 0);
}
void display_cycle(){
static uint8_t line = 0;
for(uint8_t i=0;i<128;i++){
write_bits(fb[line][i][0],fb[line][i][1],fb[line][i][2],fb[32+line][i][0],fb[32+line][i][1],fb[32+line][i][2]);
clock();
}
gpio_set_level(GPIO_OE, 1);
latch();
write_address(line);
gpio_set_level(GPIO_OE, 0);
line = (line + 1)%32;
}

36
main/display.h Normal file
View File

@@ -0,0 +1,36 @@
#ifndef _DISPLAY_H_
#define _DISPLAY_H_
#include <stdint.h>
#define DISPLAY_WIDTH 128
#define DISPLAY_HEIGHT 64
#define GPIO_R1 25
#define GPIO_G1 26
#define GPIO_B1 27
#define GPIO_R2 14
#define GPIO_G2 12
#define GPIO_B2 13
#define GPIO_CLK 16
#define GPIO_OE 15
#define GPIO_LAT 4
#define GPIO_A 23
#define GPIO_B 19
#define GPIO_C 5
#define GPIO_D 17
#define GPIO_E 18
extern uint8_t fb[64][128][3];
void write_bits(uint8_t r1, uint8_t g1, uint8_t b1, uint8_t r2, uint8_t g2, uint8_t b2);
void write_address(uint8_t addr);
void latch(void);
void clock(void);
void display_init(void);
void display_cycle(void);
#endif

101
main/font.c Normal file
View File

@@ -0,0 +1,101 @@
#include <stdint.h>
const uint8_t font[96][7] = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //
{0x5f,0x00,0x00,0x00,0x00,0x00,0x00}, // !
{0x03,0x00,0x03,0x00,0x00,0x00,0x00}, // "
{0x14,0x7f,0x14,0x7f,0x14,0x00,0x00}, // #
{0x6f,0x49,0xc9,0x7b,0x00,0x00,0x00}, // $
{0x63,0x13,0x08,0x64,0x63,0x00,0x00}, // %
{0x7f,0xc9,0x49,0x63,0x00,0x00,0x00}, // &
{0x03,0x00,0x00,0x00,0x00,0x00,0x00}, // '
{0x3e,0x41,0x00,0x00,0x00,0x00,0x00}, // (
{0x41,0x3e,0x00,0x00,0x00,0x00,0x00}, // )
{0x0a,0x04,0x1f,0x04,0x0a,0x00,0x00}, // *
{0x08,0x08,0x3e,0x08,0x08,0x00,0x00}, // +
{0xc0,0x00,0x00,0x00,0x00,0x00,0x00}, // ,
{0x08,0x08,0x08,0x08,0x00,0x00,0x00}, // -
{0x40,0x00,0x00,0x00,0x00,0x00,0x00}, // .
{0x60,0x10,0x08,0x04,0x03,0x00,0x00}, // /
{0x7f,0x41,0x41,0x7f,0x00,0x00,0x00}, // 0
{0x01,0x7f,0x00,0x00,0x00,0x00,0x00}, // 1
{0x7b,0x49,0x49,0x6f,0x00,0x00,0x00}, // 2
{0x63,0x49,0x49,0x7f,0x00,0x00,0x00}, // 3
{0x0f,0x08,0x08,0x7f,0x00,0x00,0x00}, // 4
{0x6f,0x49,0x49,0x7b,0x00,0x00,0x00}, // 5
{0x7f,0x49,0x49,0x7b,0x00,0x00,0x00}, // 6
{0x03,0x01,0x01,0x7f,0x00,0x00,0x00}, // 7
{0x7f,0x49,0x49,0x7f,0x00,0x00,0x00}, // 8
{0x0f,0x09,0x09,0x7f,0x00,0x00,0x00}, // 9
{0x22,0x00,0x00,0x00,0x00,0x00,0x00}, // :
{0xc1,0x00,0x00,0x00,0x00,0x00,0x00}, // ;
{0x08,0x14,0x22,0x00,0x00,0x00,0x00}, // <
{0x14,0x14,0x14,0x14,0x00,0x00,0x00}, // =
{0x22,0x14,0x08,0x00,0x00,0x00,0x00}, // >
{0x03,0x59,0x09,0x0f,0x00,0x00,0x00}, // ?
{0x7f,0x41,0x5d,0x55,0x5f,0x00,0x00}, // @
{0x7f,0x09,0x09,0x7f,0x00,0x00,0x00}, // A
{0x7f,0x49,0x49,0x77,0x00,0x00,0x00}, // B
{0x7f,0x41,0x41,0x63,0x00,0x00,0x00}, // C
{0x7f,0x41,0x41,0x3e,0x00,0x00,0x00}, // D
{0x7f,0x49,0x49,0x63,0x00,0x00,0x00}, // E
{0x7f,0x09,0x09,0x03,0x00,0x00,0x00}, // F
{0x7f,0x41,0x49,0x7b,0x00,0x00,0x00}, // G
{0x7f,0x08,0x08,0x7f,0x00,0x00,0x00}, // H
{0x41,0x7f,0x41,0x00,0x00,0x00,0x00}, // I
{0x60,0x40,0x40,0x7f,0x00,0x00,0x00}, // J
{0x7f,0x08,0x08,0x77,0x00,0x00,0x00}, // K
{0x7f,0x40,0x40,0x60,0x00,0x00,0x00}, // L
{0x7f,0x01,0x01,0x7f,0x01,0x01,0x7f}, // M
{0x7f,0x04,0x08,0x10,0x7f,0x00,0x00}, // N
{0x7f,0x41,0x41,0x7f,0x00,0x00,0x00}, // O
{0x7f,0x09,0x09,0x0f,0x00,0x00,0x00}, // P
{0x7f,0x41,0xc1,0x7f,0x00,0x00,0x00}, // Q
{0x7f,0x09,0x09,0x77,0x00,0x00,0x00}, // R
{0x6f,0x49,0x49,0x7b,0x00,0x00,0x00}, // S
{0x01,0x01,0x7f,0x01,0x01,0x00,0x00}, // T
{0x7f,0x40,0x40,0x7f,0x00,0x00,0x00}, // U
{0x7f,0x20,0x10,0x0f,0x00,0x00,0x00}, // V
{0x7f,0x40,0x40,0x7f,0x40,0x40,0x7f}, // W
{0x77,0x08,0x08,0x77,0x00,0x00,0x00}, // X
{0x6f,0x48,0x48,0x7f,0x00,0x00,0x00}, // Y
{0x71,0x49,0x49,0x47,0x00,0x00,0x00}, // Z
{0x7f,0x41,0x00,0x00,0x00,0x00,0x00}, // [
{0x03,0x04,0x08,0x10,0x60,0x00,0x00}, // "\"
{0x41,0x7f,0x00,0x00,0x00,0x00,0x00}, // ]
{0x04,0x02,0x01,0x02,0x04,0x00,0x00}, // ^
{0x80,0x80,0x80,0x80,0x00,0x00,0x00}, // _
{0x03,0x00,0x00,0x00,0x00,0x00,0x00}, // `
{0x74,0x54,0x54,0x7c,0x00,0x00,0x00}, // a
{0x7f,0x44,0x44,0x7c,0x00,0x00,0x00}, // b
{0x7c,0x44,0x44,0x6c,0x00,0x00,0x00}, // c
{0x7c,0x44,0x44,0x7f,0x00,0x00,0x00}, // d
{0x7c,0x54,0x54,0x5c,0x00,0x00,0x00}, // e
{0x7f,0x05,0x05,0x01,0x00,0x00,0x00}, // f
{0xbc,0xa4,0xa4,0xfc,0x00,0x00,0x00}, // g
{0x7f,0x04,0x04,0x7c,0x00,0x00,0x00}, // h
{0x7d,0x00,0x00,0x00,0x00,0x00,0x00}, // i
{0x80,0xfd,0x00,0x00,0x00,0x00,0x00}, // j
{0x7f,0x04,0x04,0x7a,0x00,0x00,0x00}, // k
{0x7f,0x00,0x00,0x00,0x00,0x00,0x00}, // l
{0x7c,0x04,0x04,0x7c,0x04,0x04,0x7c}, // m
{0x7c,0x04,0x04,0x7c,0x00,0x00,0x00}, // n
{0x7c,0x44,0x44,0x7c,0x00,0x00,0x00}, // o
{0xfc,0x44,0x44,0x7c,0x00,0x00,0x00}, // p
{0x7c,0x44,0x44,0xfc,0x00,0x00,0x00}, // q
{0x7c,0x04,0x04,0x0c,0x00,0x00,0x00}, // r
{0x5c,0x54,0x54,0x74,0x00,0x00,0x00}, // s
{0x7f,0x44,0x44,0x60,0x00,0x00,0x00}, // t
{0x7c,0x40,0x40,0x7c,0x00,0x00,0x00}, // u
{0x7c,0x20,0x10,0x0c,0x00,0x00,0x00}, // v
{0x7c,0x40,0x40,0x7c,0x40,0x40,0x7c}, // w
{0x6c,0x10,0x10,0x6c,0x00,0x00,0x00}, // x
{0xbc,0xa0,0xa0,0xfc,0x00,0x00,0x00}, // y
{0x64,0x54,0x54,0x4c,0x00,0x00,0x00}, // z
{0x08,0x3e,0x41,0x00,0x00,0x00,0x00}, // {
{0xff,0x00,0x00,0x00,0x00,0x00,0x00}, // |
{0x41,0x3e,0x08,0x00,0x00,0x00,0x00}, // }
{0x1c,0x04,0x1c,0x10,0x1c,0x00,0x00}, // ~
{0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};

View File

@@ -1,437 +0,0 @@
/* Hello World Example
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "driver/gpio.h"
#include "esp_http_client.h"
#include "esp_wifi.h"
#include "esp_netif.h"
#include "esp_eth.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_system.h"
#include "esp_spiffs.h"
#include <esp_http_server.h>
#include <nvs_flash.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "freertos/queue.h"
#include "driver/gpio.h"
#include "driver/ledc.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/param.h>
#include "esp_netif.h"
#include "esp_eth.h"
#include <cJSON.h>
#define WIFI_SSID "ags-iot"
#define WIFI_PASS "internetOfClocksAndCoffee"
//#define WIFI_SSID "AndroidAP_3324"
//#define WIFI_PASS "Hella1234"
char http_output_buffer[98304];
uint32_t buffer_pointer = 0;
// Event group
static EventGroupHandle_t wifi_event_group;
const int CONNECTED_BIT = BIT0;
static xQueueHandle gpio_evt_queue = NULL;
#ifdef CONFIG_IDF_TARGET_ESP32
#define CHIP_NAME "ESP32"
#endif
#ifdef CONFIG_IDF_TARGET_ESP32S2BETA
#define CHIP_NAME "ESP32-S2 Beta"
#endif
#define GPIO_R1 25
#define GPIO_G1 26
#define GPIO_B1 27
#define GPIO_R2 14
#define GPIO_G2 12
#define GPIO_B2 13
#define GPIO_CLK 16
#define GPIO_OE 15
#define GPIO_LAT 4
#define GPIO_A 23
#define GPIO_B 19
#define GPIO_C 5
#define GPIO_D 17
#define GPIO_E 18
uint8_t fb[64][128][3];
const unsigned char font[96][7] = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //
{0x5f,0x00,0x00,0x00,0x00,0x00,0x00}, // !
{0x03,0x00,0x03,0x00,0x00,0x00,0x00}, // "
{0x14,0x7f,0x14,0x7f,0x14,0x00,0x00}, // #
{0x6f,0x49,0xc9,0x7b,0x00,0x00,0x00}, // $
{0x63,0x13,0x08,0x64,0x63,0x00,0x00}, // %
{0x7f,0xc9,0x49,0x63,0x00,0x00,0x00}, // &
{0x03,0x00,0x00,0x00,0x00,0x00,0x00}, // '
{0x3e,0x41,0x00,0x00,0x00,0x00,0x00}, // (
{0x41,0x3e,0x00,0x00,0x00,0x00,0x00}, // )
{0x0a,0x04,0x1f,0x04,0x0a,0x00,0x00}, // *
{0x08,0x08,0x3e,0x08,0x08,0x00,0x00}, // +
{0xc0,0x00,0x00,0x00,0x00,0x00,0x00}, // ,
{0x08,0x08,0x08,0x08,0x00,0x00,0x00}, // -
{0x40,0x00,0x00,0x00,0x00,0x00,0x00}, // .
{0x60,0x10,0x08,0x04,0x03,0x00,0x00}, // /
{0x7f,0x41,0x41,0x7f,0x00,0x00,0x00}, // 0
{0x01,0x7f,0x00,0x00,0x00,0x00,0x00}, // 1
{0x7b,0x49,0x49,0x6f,0x00,0x00,0x00}, // 2
{0x63,0x49,0x49,0x7f,0x00,0x00,0x00}, // 3
{0x0f,0x08,0x08,0x7f,0x00,0x00,0x00}, // 4
{0x6f,0x49,0x49,0x7b,0x00,0x00,0x00}, // 5
{0x7f,0x49,0x49,0x7b,0x00,0x00,0x00}, // 6
{0x03,0x01,0x01,0x7f,0x00,0x00,0x00}, // 7
{0x7f,0x49,0x49,0x7f,0x00,0x00,0x00}, // 8
{0x0f,0x09,0x09,0x7f,0x00,0x00,0x00}, // 9
{0x41,0x00,0x00,0x00,0x00,0x00,0x00}, // :
{0xc1,0x00,0x00,0x00,0x00,0x00,0x00}, // ;
{0x08,0x14,0x22,0x00,0x00,0x00,0x00}, // <
{0x14,0x14,0x14,0x14,0x00,0x00,0x00}, // =
{0x22,0x14,0x08,0x00,0x00,0x00,0x00}, // >
{0x03,0x59,0x09,0x0f,0x00,0x00,0x00}, // ?
{0x7f,0x41,0x5d,0x55,0x5f,0x00,0x00}, // @
{0x7f,0x09,0x09,0x7f,0x00,0x00,0x00}, // A
{0x7f,0x49,0x49,0x77,0x00,0x00,0x00}, // B
{0x7f,0x41,0x41,0x63,0x00,0x00,0x00}, // C
{0x7f,0x41,0x41,0x3e,0x00,0x00,0x00}, // D
{0x7f,0x49,0x49,0x63,0x00,0x00,0x00}, // E
{0x7f,0x09,0x09,0x03,0x00,0x00,0x00}, // F
{0x7f,0x41,0x49,0x7b,0x00,0x00,0x00}, // G
{0x7f,0x08,0x08,0x7f,0x00,0x00,0x00}, // H
{0x41,0x7f,0x41,0x00,0x00,0x00,0x00}, // I
{0x60,0x40,0x40,0x7f,0x00,0x00,0x00}, // J
{0x7f,0x08,0x08,0x77,0x00,0x00,0x00}, // K
{0x7f,0x40,0x40,0x60,0x00,0x00,0x00}, // L
{0x7f,0x01,0x01,0x7f,0x01,0x01,0x7f}, // M
{0x7f,0x01,0x01,0x7f,0x00,0x00,0x00}, // N
{0x7f,0x41,0x41,0x7f,0x00,0x00,0x00}, // O
{0x7f,0x09,0x09,0x0f,0x00,0x00,0x00}, // P
{0x7f,0x41,0xc1,0x7f,0x00,0x00,0x00}, // Q
{0x7f,0x09,0x09,0x77,0x00,0x00,0x00}, // R
{0x6f,0x49,0x49,0x7b,0x00,0x00,0x00}, // S
{0x01,0x01,0x7f,0x01,0x01,0x00,0x00}, // T
{0x7f,0x40,0x40,0x7f,0x00,0x00,0x00}, // U
{0x7f,0x20,0x10,0x0f,0x00,0x00,0x00}, // V
{0x7f,0x40,0x40,0x7f,0x40,0x40,0x7f}, // W
{0x77,0x08,0x08,0x77,0x00,0x00,0x00}, // X
{0x6f,0x48,0x48,0x7f,0x00,0x00,0x00}, // Y
{0x71,0x49,0x49,0x47,0x00,0x00,0x00}, // Z
{0x7f,0x41,0x00,0x00,0x00,0x00,0x00}, // [
{0x03,0x04,0x08,0x10,0x60,0x00,0x00}, // "\"
{0x41,0x7f,0x00,0x00,0x00,0x00,0x00}, // ]
{0x04,0x02,0x01,0x02,0x04,0x00,0x00}, // ^
{0x80,0x80,0x80,0x80,0x00,0x00,0x00}, // _
{0x03,0x00,0x00,0x00,0x00,0x00,0x00}, // `
{0x74,0x54,0x54,0x7c,0x00,0x00,0x00}, // a
{0x7f,0x44,0x44,0x7c,0x00,0x00,0x00}, // b
{0x7c,0x44,0x44,0x6c,0x00,0x00,0x00}, // c
{0x7c,0x44,0x44,0x7f,0x00,0x00,0x00}, // d
{0x7c,0x54,0x54,0x5c,0x00,0x00,0x00}, // e
{0x7f,0x05,0x05,0x01,0x00,0x00,0x00}, // f
{0xbc,0xa4,0xa4,0xfc,0x00,0x00,0x00}, // g
{0x7f,0x04,0x04,0x7c,0x00,0x00,0x00}, // h
{0x7d,0x00,0x00,0x00,0x00,0x00,0x00}, // i
{0x80,0xfd,0x00,0x00,0x00,0x00,0x00}, // j
{0x7f,0x04,0x04,0x7a,0x00,0x00,0x00}, // k
{0x7f,0x00,0x00,0x00,0x00,0x00,0x00}, // l
{0x7c,0x04,0x04,0x7c,0x04,0x04,0x7c}, // m
{0x7c,0x04,0x04,0x7c,0x00,0x00,0x00}, // n
{0x7c,0x44,0x44,0x7c,0x00,0x00,0x00}, // o
{0xfc,0x44,0x44,0x7c,0x00,0x00,0x00}, // p
{0x7c,0x44,0x44,0xfc,0x00,0x00,0x00}, // q
{0x7c,0x04,0x04,0x0c,0x00,0x00,0x00}, // r
{0x5c,0x54,0x54,0x74,0x00,0x00,0x00}, // s
{0x7f,0x44,0x44,0x60,0x00,0x00,0x00}, // t
{0x7c,0x40,0x40,0x7c,0x00,0x00,0x00}, // u
{0x7c,0x20,0x10,0x0c,0x00,0x00,0x00}, // v
{0x7c,0x40,0x40,0x7c,0x40,0x40,0x7c}, // w
{0x6c,0x10,0x10,0x6c,0x00,0x00,0x00}, // x
{0xbc,0xa0,0xa0,0xfc,0x00,0x00,0x00}, // y
{0x64,0x54,0x54,0x4c,0x00,0x00,0x00}, // z
{0x08,0x3e,0x41,0x00,0x00,0x00,0x00}, // {
{0xff,0x00,0x00,0x00,0x00,0x00,0x00}, // |
{0x41,0x3e,0x08,0x00,0x00,0x00,0x00}, // }
{0x1c,0x04,0x1c,0x10,0x1c,0x00,0x00}, // ~
{0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};
void connect_to_wifi(char* new_ssid, char* new_psk){
printf("ssid: \'%s\'\n", new_ssid);
printf("psk:\'%s\'\n", new_psk);
ESP_ERROR_CHECK(esp_wifi_stop());
wifi_init_config_t wifi_init_config = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&wifi_init_config));
ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
// configure the wifi connection and start the interface
wifi_config_t wifi_config = {
.sta = {
.ssid = {*new_ssid},
.password = {*new_psk}
}
};
strcpy(&(wifi_config.sta.ssid), new_ssid);
strcpy(&(wifi_config.sta.password), new_psk);
printf("ssid: \'%s\'\n", wifi_config.sta.ssid);
printf("psk: \'%s\'\n", wifi_config.sta.password);
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());
}
// Wifi event handler
static esp_err_t event_handler(void *ctx, system_event_t *event)
{
switch(event->event_id) {
case SYSTEM_EVENT_STA_START:
esp_wifi_connect();
break;
case SYSTEM_EVENT_STA_GOT_IP:
xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);
break;
case SYSTEM_EVENT_STA_DISCONNECTED:
xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
printf("disconnected!\n");
break;
default:
break;
}
return ESP_OK;
}
#define TAG "test"
esp_err_t _http_event_handle(esp_http_client_event_t *evt)
{
switch(evt->event_id) {
case HTTP_EVENT_ERROR:
ESP_LOGI(TAG, "HTTP_EVENT_ERROR");
break;
case HTTP_EVENT_ON_CONNECTED:
ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED");
buffer_pointer = 0;
break;
case HTTP_EVENT_HEADER_SENT:
ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT");
break;
case HTTP_EVENT_ON_HEADER:
ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER");
printf("%.*s", evt->data_len, (char*)evt->data);
break;
case HTTP_EVENT_ON_DATA:
ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
if (!esp_http_client_is_chunked_response(evt->client)) {
memcpy(&http_output_buffer[buffer_pointer], evt->data, evt->data_len);
buffer_pointer += evt->data_len;
}
break;
case HTTP_EVENT_ON_FINISH:
ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH");
http_output_buffer[buffer_pointer+1] = 0;
//printf("%s", http_output_buffer);
printf("PRINTING RECIEVED STRING:\n");
printf("%.*s\n", buffer_pointer, http_output_buffer);
printf("END OF RECIEVED STRING\n");
cJSON *root = cJSON_Parse(http_output_buffer);
const char *error_ptr = cJSON_GetErrorPtr();
//printf("error: %s\n", error_ptr-100);
//printf("%s", cJSON_Print(root));
printf("size is: %d\n", buffer_pointer);
if(root != NULL) {
cJSON* departureListObject = cJSON_GetObjectItem(root, "departureList");
if(departureListObject != NULL) {
cJSON* departureListObject = cJSON_GetObjectItem(root, "departureList");
printf("%s", cJSON_Print(departureListObject));
}
else
printf("dl empty\n");
}
else
printf("root empty\n");
break;
case HTTP_EVENT_DISCONNECTED:
ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED");
break;
}
return ESP_OK;
}
void write_bits(uint8_t r1, uint8_t g1, uint8_t b1, uint8_t r2, uint8_t g2, uint8_t b2){
gpio_set_level(GPIO_R1, r1);
gpio_set_level(GPIO_G1, g1);
gpio_set_level(GPIO_B1, b1);
gpio_set_level(GPIO_R2, r2);
gpio_set_level(GPIO_G2, g2);
gpio_set_level(GPIO_B2, b2);
}
void write_address(uint8_t addr){
gpio_set_level(GPIO_A, addr&0x01);
gpio_set_level(GPIO_B, (addr&0x02)>>1);
gpio_set_level(GPIO_C, (addr&0x04)>>2);
gpio_set_level(GPIO_D, (addr&0x08)>>3);
gpio_set_level(GPIO_E, (addr&0x10)>>4);
}
void put_chr(uint8_t line, uint8_t pos, uint8_t chr[]){
for(int i=0;i<8;i++)
for(int j=0;j<7;j++)
fb[1+(line*10)+i][(pos*7)+j][0] = (chr[j]&(1<<i))>>i;
}
void put_line(uint8_t line, char *str){
uint8_t pos = 0;
while(str[pos] != 0){
put_chr(line, pos, font[str[pos]-0x20]);
pos++;
}
}
void latch(){
gpio_set_level(GPIO_LAT, 0);
gpio_set_level(GPIO_LAT, 1);
}
void clock_cycle(){
gpio_set_level(GPIO_CLK, 1);
gpio_set_level(GPIO_CLK, 0);
}
void app_main(void)
{
printf("Hello world!\n");
ESP_ERROR_CHECK(nvs_flash_init());
wifi_event_group = xEventGroupCreate();
tcpip_adapter_init();
ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));
printf("1!\n");
wifi_init_config_t wifi_init_config = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&wifi_init_config));
ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
printf("2!\n");
wifi_config_t wifi_config = {
.sta = {
.ssid = WIFI_SSID,
.password = WIFI_PASS,
},
};
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());
printf("Connecting to %s\n", WIFI_SSID);
EventBits_t uxBits;
uxBits = xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true, 5000 / portTICK_PERIOD_MS);
printf("3!\n");
if( ( uxBits & CONNECTED_BIT ) != 0 )
{
printf("Connected!\n");
}
else{
printf("Not connected!\n");
}
// put_line(0, "429 Amalienplatz");
// put_line(1, "0123abcd");
// put_line(2, "ags");
put_line(0, "Wissenschaftliche");
put_line(1, "Arbeitsgemein-");
put_line(2, "schaft für Studio-");
put_line(3, "und Senderfragen");
put_line(4, "an der");
put_line(5, "TU Braunschweig");
gpio_config_t io_conf;
//disable interrupt
io_conf.intr_type = GPIO_INTR_DISABLE;
//set as output mode
io_conf.mode = GPIO_MODE_OUTPUT;
//bit mask of the pins that you want to set,e.g.GPIO18/19
io_conf.pin_bit_mask =
(1ULL<<GPIO_LAT)|(1ULL<<GPIO_OE)|(1ULL<<GPIO_CLK)
|(1ULL<<GPIO_R1)|(1ULL<<GPIO_G1)|(1ULL<<GPIO_B1)|(1ULL<<GPIO_R2)|(1ULL<<GPIO_G2)|(1ULL<<GPIO_B2)
|(1ULL<<GPIO_A)|(1ULL<<GPIO_B)|(1ULL<<GPIO_C)|(1ULL<<GPIO_D)|(1ULL<<GPIO_E);
//disable pull-down mode
io_conf.pull_down_en = 0;
//disable pull-up mode
io_conf.pull_up_en = 0;
//configure GPIO with the given settings
gpio_config(&io_conf);
esp_http_client_config_t config = {
//.url = "https://bsvg.efa.de/bsvagstd/XML_DM_REQUEST?outputFormat=JSON&stateless=1&locationServerActive=1&type_dm=stop&name_dm=\"Saarplatz,Braunschweig\"&mode=direct&ptOptionsActive=1&useRealtime=1",
.url = "http://mustbehax.de/web/bsvg.json",
.event_handler = _http_event_handle,
};
esp_http_client_handle_t client = esp_http_client_init(&config);
esp_err_t err = esp_http_client_perform(client);
if (err == ESP_OK) {
ESP_LOGI(TAG, "Status = %d, content_length = %d",
esp_http_client_get_status_code(client),
esp_http_client_get_content_length(client));
}
esp_http_client_cleanup(client);
gpio_set_level(GPIO_OE, 1);
gpio_set_level(GPIO_OE, 0);
uint8_t line = 0;
for (;;) {
for(uint8_t i=0;i<128;i++){
write_bits(fb[line][i][0],fb[line][i][1],fb[line][i][2],fb[32+line][i][0],fb[32+line][i][1],fb[32+line][i][2]);
//write_bits(1,1,1,1,1,1);
clock_cycle();
}
gpio_set_level(GPIO_OE, 1);
latch();
write_address(line);
gpio_set_level(GPIO_OE, 0);
line = (line + 1)%32;
}
}

39
main/main.c Normal file
View File

@@ -0,0 +1,39 @@
/* Hello World Example
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "driver/gpio.h"
#include "display.h"
#include "text.h"
#ifdef CONFIG_IDF_TARGET_ESP32
#define CHIP_NAME "ESP32"
#endif
#ifdef CONFIG_IDF_TARGET_ESP32S2BETA
#define CHIP_NAME "ESP32-S2 Beta"
#endif
void app_main(void)
{
printf("Hello world!\n");
display_init();
put_line(fb, 2, "429 Amalienplatz", 1, 1);
for (;;) {
display_cycle();
}
}

50
main/text.c Normal file
View File

@@ -0,0 +1,50 @@
#include <stdint.h>
#include "text.h"
uint8_t check_chr_width(const uint8_t chr[]){
for(int i=6;i>=0;i--)
if(chr[i] != 0)
return i;
return 2; //space character
}
void put_chr(uint8_t framebuffer[DISPLAY_HEIGHT][DISPLAY_WIDTH][3], uint8_t line, uint8_t pos, const uint8_t chr[], uint8_t size){
for(int i=0;i<8;i++)
for(int j=0;j<7;j++){
uint8_t val = (chr[j]&(1<<i))>>i;
for(int x=0;x<size;x++)
for(int y=0;y<size;y++)
framebuffer[1+(line*10)+(i*size)+y][(pos)+(j*size)+x][0] = val;
}
}
void put_line(uint8_t framebuffer[DISPLAY_HEIGHT][DISPLAY_WIDTH][3], uint8_t line, char *str, uint8_t spacing, uint8_t size){
uint8_t pos = 0;
uint8_t disp_pos = 0;
while(str[pos] != 0){
put_chr(framebuffer, line, disp_pos, font[str[pos]-0x20], size);
disp_pos += (check_chr_width(font[str[pos]-0x20]) + 1 + spacing)*size;
pos++;
}
}
void put_line_center(uint8_t framebuffer[DISPLAY_HEIGHT][DISPLAY_WIDTH][3], uint8_t line, char *str, uint8_t spacing, uint8_t size){
uint8_t pos = 0;
uint8_t txt_length = 0;
while(str[pos] != 0){
txt_length += (check_chr_width(font[str[pos]-0x20]) + 1 + spacing)*size;
pos++;
}
pos=0;
uint8_t disp_pos = (DISPLAY_WIDTH/2) - (txt_length/2);
while(str[pos] != 0){
put_chr(framebuffer, line, disp_pos, font[str[pos]-0x20], size);
disp_pos += (check_chr_width(font[str[pos]-0x20]) + 1 + spacing)*size;
pos++;
}
}

12
main/text.h Normal file
View File

@@ -0,0 +1,12 @@
#ifndef _TEXT_H_
#define _TEXT_H_
#include <stdint.h>
#include "display.h"
extern const uint8_t font[96][7];
void put_line(uint8_t framebuffer[DISPLAY_HEIGHT][DISPLAY_WIDTH][3], uint8_t line, char *str, uint8_t spacing, uint8_t size);
void put_line_center(uint8_t framebuffer[DISPLAY_HEIGHT][DISPLAY_WIDTH][3], uint8_t line, char *str, uint8_t spacing, uint8_t size);
#endif