Back

The Friendly Kiosk Project

Kiosk and POS System written in Android, C#, Go

Stacks being used in this project

C#
C#
Go
Go
jQuery
jQuery
Android
Android
SQLite
SQLite

What is this project about?

The “The Friendly Kiosk” project is a project that developed, operated, and supplied automatic order kiosks and POS systems for order verification.

Additional visual information about menus, options, and materials is provided through image and various functions such as recommendation and search, considering the elderly and the developmentally challenged who have difficulty recognizing information.

Image resources were provided by Ulsan City Democratic Protection Center, which is conducting ‘The Friendly Menu’ business.

The project was actually applied to the cafe and has been in operation since January 2021.

Korean (한국어)

해당 '알기쉬운 키오스크' 프로젝트는 자동 주문 키오스크와 주문 확인용 POS 시스템을 개발하여 운영, 공급한 프로젝트입니다.

일반인 뿐만 아니라 메뉴에 대한 정보 인식이 힘든 노약자, 발달장애인을 고려하여 메뉴, 옵션, 재료에 대한 추가적인 시각적 정보를 이미지, 검색 기능을 통해 제공합니다.

이미지 리소스는 ‘알기쉬운 메뉴판’ 사업을 진행하고 있는 울산시민주간보호센터에서 제공받았습니다.

해당 프로젝트는 실제로 카페에 적용되어 2021년 1월부터 운영되고 있습니다.

Spec

IMAGES

안드로이드 프레임워크 및 공유기 내부망 및 내부 DB를 이용해 동작하는 방식입니다. 카드를 이용한 주문 및 정산과 앱 내 메뉴 관리가 가능하며 재료 검색 기능을 포함하고 있습니다.

SPEC

  • POS
    • Hardware
      • Windows 7 Based OS (POSReady 7)
      • Ivybridge based low voltage Dual-Core CPU (1037U)
      • 2GB RAM
    • Software
      • Golang
        • Iris framework
      • jQuery
      • Sqlite
      • C#

What did you do?

As a team leader and lead developer, I managed most of the developments and communication with organizations and companies outside. Details are on below.

  • Structured entire system base
    • Hardware
      • Odroid (Android Dev Board)
        • Purchased and managed boards including installing and setting firmware.
    • Data Structure
      • Built table and column structure
      • Wrote relations and queries
    • Chose Languages and Frameworks
  • Developed Android Kiosk Application
    • Designed and coded UI, UX
    • Implemented Ordering, Purchasing, Networking, Interaction, DB Part
      • Dealing with Credit card reader and Printing thermal printer included
  • Developed Web POS System
    • Frontend
      • Used jQuery and Bootstrap
      • Realtime Order details and waiting
      • Income Calculation Page
    • Backend
      • Developed Backend using Go and Sqlite
      • Developed Thermal Printer server using C#
        • Communicating with Go server with TCP protocol
  • Communicating with co-op organizations such as University of Ulsan, Centers for the disabled
Korean (한국어)
  • 전체 시스템의 구조를 구상 및 설계하였습니다.
    • 시스템 구성요소
      • 사용될 하드웨어 및 개발보드 탐색
    • 데이터 구조
      • 사용할 DB 엔진 탐색
      • 테이블, 컬럼 구조
    • 사용될 언어 및 프레임워크
  • 안드로이드 키오스크 어플리케이션을 개발하고 구현하였습니다.
    • UI, UX 설계 및 구현
    • 주문 및 결제, 네트워크, DB 연동 등 핵심 기반 개발 및 구체화
    • 카드 결제 리더기 및 영수증 출력기 통신 기반 구현
  • 웹 POS 시스템 전반을 개발하고 구현하였습니다.
    • 프론트엔드
      • 실시간 주문 확인 페이지
      • 실시간 주문 대기열 확인 페이지
      • 정산 페이지
    • 백엔드
      • HTTP 기반 백엔드 서버 및 데이터베이스 전반
      • 영수증 출력 서버 어플리케이션
        • C#으로 별도 제작
        • TCP 방식으로 통신하며 영수증 출력
  • LINC+ 사업단 및 카드회사, 장애인시설 등 연계된 자원들과 소통

Technical challenges

Platform

There were several options such as PC Linux, Windows, Android, and I chose Android.

Linux distros such as Ubuntu, CentOS were nice option to go. Lots of languages and frameworks can be run on linux, and some distros are lightweight and optimized for embedded environment, such as kiosk machine. Unfortunately, There were few external devices (credit card reader, thermal printer) necessary for the project officially supporting Linux system.

For this case, Windows was the best option. Literally every external devices is officially supported, and actually recommended by vendors to use Windows OS. But Windows development boards were about over $300 to get, which was quite expensive for students like us. Mini PC was considered too, but we had to find a small board to embed this inside Kiosk machine.

So, I chose to develop on the Android platform. You can purchase a development board at a lower price than Windows one, only about $50, and apps can be made quite lightweight and speedy. Also, external devices I needed could be used on android platform, even thought some features were experimental vendors said.

Billing and Printing receipt

It was the first time to use a card reader device and a receipt printer in development project for me, So at first I had no idea where to start. By referring to technical documents and examples provided by vendors and google, we could understand how to control them. In the case of the credit card reader one, it was simple. The Android app developed by the vendor provided usability for app to app communication through intent to process payment. Simply put, the app itself could be used as a function. If our order app calls the payment app, it sends payment information as a parameter to the payment app, and the payment app processes payment and return the result to the order app. Simple!

Printing receipt was more complicated. We had to send bytecodes to the printer machine to print the receipt. All newlines, alignments, characters, tabs, and other commands had to be done through a predefined bytecode, called ESCPOS. It is not such a complicated communication method, but it was not a familiar method to create a string first, then convert it into bytecode in a predetermined way and then transmit it. However, as the development progressed, I was able to get used to it. it was difficult to find related documents about this because there were not many cases of communication through serial or USB on Android. Fortunately, since the vendor provided the example source we were able to proceed with the development without lots of difficulties.

POS And Android Order App

At the first time, I was about to make desktop application with Go language. There were few reasons.

One of them was because i was really into Go language that time, Almost spreading about How Golang can be used in various platforms and environment like java and python do, But running as a native application so fast. Sadly, Golang doesn’t have official GUI Framework. 3rd party frameworks such as QT and GTK were on options But I decided to not use them because of lack of maintainers.

C# was a good candidate too. but I wasn’t sure about making desktop application with C# (And dotnet framework) because of its heaviness. The POS PC we had to use were with dual-core CPU over 10 years ago with 1GB Ram. It turned out that it could manage dotnet core desktop application quite well later, But in that time I was concerned about running it on the Low-End PC. I knew chrome is running on there quite well (for running Youtube) through, So What I decided is to make Web-Based POS Application with Go language.

What I had to figure out was how to make communication between POS App running on Windows POS PC and The Order App running on Android. Basic approach such as TCP and UDP were nice, but they are not convenient to develop and maintain like HTTP. And The POS solution will be made as a web application, so I chose HTTP as a main protocol. Also, JSON was used for networking format. Almost every language are supporting JSON officially or via library, so I thought it could be a nice standard to go. And it worked just like charm.

Team

  • Team Leader
    • Seongbin Yoon
  • Developer
    • Minwoo Kim
    • Hyorim Jang
    • Seulgi Park

Supports

  • LINC+ Centre of University of Ulsan
  • Associates
Built with Hugo
Theme Stack designed by Jimmy