From 1ae9ebaafbb2f99a678afce653acbb5f2d8788e5 Mon Sep 17 00:00:00 2001 From: Paul Warren Date: Fri, 22 Nov 2019 19:34:26 +1100 Subject: [PATCH] Initial import after n embarassing credentials incidient :) --- .gitignore | 38 ++ LICENSE | 674 ++++++++++++++++++++++++++++++++++ README.md | 22 ++ build.sh | 40 ++ epd.cpp | 766 +++++++++++++++++++++++++++++++++++++++ epd.h | 156 ++++++++ esp_time.ino | 279 ++++++++++++++ images/0.jpg | Bin 0 -> 4624 bytes images/1.jpg | Bin 0 -> 3343 bytes images/2.jpg | Bin 0 -> 4798 bytes images/3.jpg | Bin 0 -> 4631 bytes images/4.jpg | Bin 0 -> 4001 bytes images/5.jpg | Bin 0 -> 4191 bytes images/6.jpg | Bin 0 -> 5254 bytes images/7.jpg | Bin 0 -> 3457 bytes images/8.jpg | Bin 0 -> 5529 bytes images/9.jpg | Bin 0 -> 5240 bytes images/COLO.jpg | Bin 0 -> 1922 bytes images/build.sh | 15 + images/create_images.py | 19 + images/images.ino | 52 +++ images/old/0.jpg | Bin 0 -> 5007 bytes images/old/0_cropped.jpg | Bin 0 -> 9163 bytes images/old/1.jpg | Bin 0 -> 3599 bytes images/old/2.jpg | Bin 0 -> 5076 bytes images/old/3.jpg | Bin 0 -> 4962 bytes images/old/4.jpg | Bin 0 -> 4461 bytes images/old/5.jpg | Bin 0 -> 4404 bytes images/old/6.jpg | Bin 0 -> 5510 bytes images/old/7.jpg | Bin 0 -> 3554 bytes images/old/8.jpg | Bin 0 -> 5930 bytes images/old/9.jpg | Bin 0 -> 5473 bytes images/old/COLO.jpg | Bin 0 -> 2052 bytes 33 files changed, 2061 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100755 build.sh create mode 100644 epd.cpp create mode 100644 epd.h create mode 100644 esp_time.ino create mode 100644 images/0.jpg create mode 100644 images/1.jpg create mode 100644 images/2.jpg create mode 100644 images/3.jpg create mode 100644 images/4.jpg create mode 100644 images/5.jpg create mode 100644 images/6.jpg create mode 100644 images/7.jpg create mode 100644 images/8.jpg create mode 100644 images/9.jpg create mode 100644 images/COLO.jpg create mode 100755 images/build.sh create mode 100644 images/create_images.py create mode 100644 images/images.ino create mode 100644 images/old/0.jpg create mode 100644 images/old/0_cropped.jpg create mode 100644 images/old/1.jpg create mode 100644 images/old/2.jpg create mode 100644 images/old/3.jpg create mode 100644 images/old/4.jpg create mode 100644 images/old/5.jpg create mode 100644 images/old/6.jpg create mode 100644 images/old/7.jpg create mode 100644 images/old/8.jpg create mode 100644 images/old/9.jpg create mode 100644 images/old/COLO.jpg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a4c5db --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# Credentials +credential.h + +# emacs files +*~ + +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..76e8fbd --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# EPClock +ESP8226 Arduino based ePaper clock + +Using a Waveshare 4.3" UART module and an ESP8226 R1 Mini from Jaycar Australia, which is a D1 Mini in Arduino. + +## Required Libraries + +Timezone: [https://github.com/JChristensen/Timezone]() +NTPClient: [https://github.com/arduino-libraries/NTPClient]() + + +## Connections + +* WakeUp -> D7 +* Reset - D8 +* DOUT -> D5 +* DIN -> D6 + + +## Creating Images for each digit + +Use Images/create_images.py edit for font choice! The current images are in FreeMono. \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..f7df11d --- /dev/null +++ b/build.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +opt=$1 +case $opt in + -u) ~/bin/arduino --upload -v --port /dev/ttyUSB0 --board esp8266:esp8266:d1_mini:baud=460800,ip=lm6f esp_time.ino + ;; + *) ~/bin/arduino --verify -v --board esp8266:esp8266:d1_mini:baud=460800,ip=lm6f esp_time.ino + ;; +esac + + + + + + +# /home/pwarren/Projects/arduino-1.8.10/arduino-builder +# -dump-prefs +# -logger=machine +# -hardware /home/pwarren/Projects/arduino-1.8.10/hardware +# -hardware /home/pwarren/.arduino15/packages +# -tools /home/pwarren/Projects/arduino-1.8.10/tools-builder +# -tools /home/pwarren/Projects/arduino-1.8.10/hardware/tools/avr +# -tools /home/pwarren/.arduino15/packages +# -built-in-libraries /home/pwarren/Projects/arduino-1.8.10/libraries +# -libraries /home/pwarren/Arduino/libraries +# -fqbn=esp8266:esp8266:d1_mini:xtal=80,vt=flash,exception=legacy,ssl=all,eesz=4M2M,ip=lm6f,dbg=Disabled,lvl=None____,wipe=none,baud=460800 +# -vid-pid=1A86_7523 +# -ide-version=10810 +# -build-path /tmp/arduino_build_589661 +# -warnings=all +# -build-cache /tmp/arduino_cache_275875 +# -prefs=build.warn_data_percentage=75 +# -prefs=runtime.tools.xtensa-lx106-elf-gcc.path=/home/pwarren/.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506 +# -prefs=runtime.tools.xtensa-lx106-elf-gcc-2.5.0-4-b40a506.path=/home/pwarren/.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506 +# -prefs=runtime.tools.python3.path=/home/pwarren/.arduino15/packages/esp8266/tools/python3/3.7.2-post1 -prefs=runtime.tools.python3-3.7.2-post1.path=/home/pwarren/.arduino15/packages/esp8266/tools/python3/3.7.2-post1 +# -prefs=runtime.tools.mklittlefs.path=/home/pwarren/.arduino15/packages/esp8266/tools/mklittlefs/2.5.0-4-69bd9e6 +# -prefs=runtime.tools.mklittlefs-2.5.0-4-69bd9e6.path=/home/pwarren/.arduino15/packages/esp8266/tools/mklittlefs/2.5.0-4-69bd9e6 +# -prefs=runtime.tools.mkspiffs.path=/home/pwarren/.arduino15/packages/esp8266/tools/mkspiffs/2.5.0-4-b40a506 +# -prefs=runtime.tools.mkspiffs-2.5.0-4-b40a506.path=/home/pwarren/.arduino15/packages/esp8266/tools/mkspiffs/2.5.0-4-b40a506 +# -verbose /tmp/arduino_modified_sketch_422089/IPv6.ino diff --git a/epd.cpp b/epd.cpp new file mode 100644 index 0000000..1ff7469 --- /dev/null +++ b/epd.cpp @@ -0,0 +1,766 @@ +/********************************************************************************************************* +* +* File : epd.c +* Hardware Environment: +* Build Environment : RealView MDK-ARM Version: 4.74 +* Version : V1.0 +* By : V +* +* (c) Copyright 2005-2014, WaveShare +* http://www.waveshare.net +* All Rights Reserved +* +*********************************************************************************************************/ +#include "epd.h" +#include +#include + + +const int wake_up = D7; +const int reset = D8; + +SoftwareSerial mySerial(D5,D6); + +/* +command define +*/ +static const unsigned char _cmd_handshake[8] = {0xA5, 0x00, 0x09, CMD_HANDSHAKE, 0xCC, 0x33, 0xC3, 0x3C}; //CMD_HANDSHAKE +static const unsigned char _cmd_read_baud[8] = {0xA5, 0x00, 0x09, CMD_READ_BAUD, 0xCC, 0x33, 0xC3, 0x3C}; //CMD_READ_BAUD +static const unsigned char _cmd_stopmode[8] = {0xA5, 0x00, 0x09, CMD_STOPMODE, 0xCC, 0x33, 0xC3, 0x3C}; //CMD_STOPMODE +static const unsigned char _cmd_update[8] = {0xA5, 0x00, 0x09, CMD_UPDATE, 0xCC, 0x33, 0xC3, 0x3C}; //CMD_UPDATE +static const unsigned char _cmd_load_font[8] = {0xA5, 0x00, 0x09, CMD_LOAD_FONT, 0xCC, 0x33, 0xC3, 0x3C}; //CMD_LOAD_FONT +static const unsigned char _cmd_load_pic[8] = {0xA5, 0x00, 0x09, CMD_LOAD_PIC, 0xCC, 0x33, 0xC3, 0x3C}; //CMD_LOAD_PIC + + + + +static unsigned char _cmd_buff[CMD_SIZE]; + + + +/* +private function +*/ +static void _putchars(const unsigned char * ptr, int n); +static unsigned char _verify(const void * ptr, int n); + + + +/******************************************************************************* +* Function Name : static void _putchars(const unsigned char * ptr, int n) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +static void _putchars(const unsigned char * ptr, int n) +{ + int i, x; + + for(i = 0; i < n; i++) + { + x = ptr[i]; + mySerial.write(x); + } +} +/******************************************************************************* +* Function Name : static unsigned char _verify(const void * ptr, int n) +* Description : +* Input : ptr + n +* Output : None +* Return : +*******************************************************************************/ +static unsigned char _verify(const void * ptr, int n) +{ + int i; + unsigned char * p = (unsigned char *)ptr; + unsigned char result; + + for(i = 0, result = 0; i < n; i++) + { + result ^= p[i]; + } + + return result; +} + + + + +/******************************************************************************* +* Function Name : void epd_init(void) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_init(void) +{ + mySerial.begin(115200); + pinMode(wake_up, OUTPUT); + digitalWrite(wake_up, LOW); + pinMode(reset, OUTPUT); + digitalWrite(reset, LOW); +} +/******************************************************************************* +* Function Name : void epd_reset(void) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_reset(void) +{ + digitalWrite(reset, LOW); + delayMicroseconds(1000); + digitalWrite(reset, HIGH); + delayMicroseconds(5000); + digitalWrite(reset, LOW); + delay(3000); +} +/******************************************************************************* +* Function Name : void epd_init(void) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_wakeup(void) +{ + digitalWrite(wake_up, LOW); + delayMicroseconds(1000); + digitalWrite(wake_up, HIGH); + delayMicroseconds(50000); + digitalWrite(wake_up, LOW); + delay(10); +} + +/******************************************************************************* +* Function Name : void epd_handshake(void) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_handshake(void) +{ + memcpy(_cmd_buff, _cmd_handshake, 8); + _cmd_buff[8] = _verify(_cmd_buff, 8); + + _putchars(_cmd_buff, 9); +} +/******************************************************************************* +* Function Name : void epd_set_baud(long baud) +* Description : set uart baud +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_set_baud(long baud) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x0D; + + _cmd_buff[3] = CMD_SET_BAUD; + + _cmd_buff[4] = (baud >> 24) & 0xFF; + _cmd_buff[5] = (baud >> 16) & 0xFF; + _cmd_buff[6] = (baud >> 8) & 0xFF; + _cmd_buff[7] = baud & 0xFF; + + _cmd_buff[8] = FRAME_E0; + _cmd_buff[9] = FRAME_E1; + _cmd_buff[10] = FRAME_E2; + _cmd_buff[11] = FRAME_E3; + _cmd_buff[12] = _verify(_cmd_buff, 12); + + _putchars(_cmd_buff, 13); + + delay(10); + mySerial.begin(baud); +} +/******************************************************************************* +* Function Name : void epd_read_baud(void) +* Description : read uart baud +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_read_baud(void) +{ + memcpy(_cmd_buff, _cmd_read_baud, 8); + _cmd_buff[8] = _verify(_cmd_buff, 8); + + _putchars(_cmd_buff, 9); +} +/******************************************************************************* +* Function Name : void epd_set_memory(unsigned char mode) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_set_memory(unsigned char mode) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x0A; + + _cmd_buff[3] = CMD_MEMORYMODE; + + _cmd_buff[4] = mode; + + _cmd_buff[5] = FRAME_E0; + _cmd_buff[6] = FRAME_E1; + _cmd_buff[7] = FRAME_E2; + _cmd_buff[8] = FRAME_E3; + _cmd_buff[9] = _verify(_cmd_buff, 9); + + _putchars(_cmd_buff, 10); +} + +/******************************************************************************* +* Function Name : void epd_enter_stopmode(void) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_enter_stopmode(void) +{ + memcpy(_cmd_buff, _cmd_stopmode, 8); + _cmd_buff[8] = _verify(_cmd_buff, 8); + + _putchars(_cmd_buff, 9); +} +/******************************************************************************* +* Function Name : void epd_update(void) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_update(void) +{ + memcpy(_cmd_buff, _cmd_update, 8); + _cmd_buff[8] = _verify(_cmd_buff, 8); + + _putchars(_cmd_buff, 9); +} +/******************************************************************************* +* Function Name : void epd_screen_rotation(unsigned char mode) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_screen_rotation(unsigned char mode) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x0A; + + _cmd_buff[3] = CMD_SCREEN_ROTATION; + + _cmd_buff[4] = mode; + + _cmd_buff[5] = FRAME_E0; + _cmd_buff[6] = FRAME_E1; + _cmd_buff[7] = FRAME_E2; + _cmd_buff[8] = FRAME_E3; + _cmd_buff[9] = _verify(_cmd_buff, 9); + + _putchars(_cmd_buff, 10); +} +/******************************************************************************* +* Function Name : void epd_load_font(void) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_load_font(void) +{ + memcpy(_cmd_buff, _cmd_load_font, 8); + _cmd_buff[8] = _verify(_cmd_buff, 8); + + _putchars(_cmd_buff, 9); +} +/******************************************************************************* +* Function Name : void epd_load_pic(void) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_load_pic(void) +{ + memcpy(_cmd_buff, _cmd_load_pic, 8); + _cmd_buff[8] = _verify(_cmd_buff, 8); + + _putchars(_cmd_buff, 9); +} +/******************************************************************************* +* Function Name : void epd_set_color(unsigned char color, unsigned char bkcolor) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_set_color(unsigned char color, unsigned char bkcolor) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x0B; + + _cmd_buff[3] = CMD_SET_COLOR; + + _cmd_buff[4] = color; + _cmd_buff[5] = bkcolor; + + _cmd_buff[6] = FRAME_E0; + _cmd_buff[7] = FRAME_E1; + _cmd_buff[8] = FRAME_E2; + _cmd_buff[9] = FRAME_E3; + _cmd_buff[10] = _verify(_cmd_buff, 10); + + _putchars(_cmd_buff, 11); +} +/******************************************************************************* +* Function Name : void epd_set_en_font(unsigned char font) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_set_en_font(unsigned char font) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x0A; + + _cmd_buff[3] = CMD_SET_EN_FONT; + + _cmd_buff[4] = font; + + _cmd_buff[5] = FRAME_E0; + _cmd_buff[6] = FRAME_E1; + _cmd_buff[7] = FRAME_E2; + _cmd_buff[8] = FRAME_E3; + _cmd_buff[9] = _verify(_cmd_buff, 9); + + _putchars(_cmd_buff, 10); +} +/******************************************************************************* +* Function Name : void epd_set_ch_font(unsigned char font) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_set_ch_font(unsigned char font) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x0A; + + _cmd_buff[3] = CMD_SET_CH_FONT; + + _cmd_buff[4] = font; + + _cmd_buff[5] = FRAME_E0; + _cmd_buff[6] = FRAME_E1; + _cmd_buff[7] = FRAME_E2; + _cmd_buff[8] = FRAME_E3; + _cmd_buff[9] = _verify(_cmd_buff, 9); + + _putchars(_cmd_buff, 10); +} +/******************************************************************************* +* Function Name : void epd_draw_pixel(int x0, int y0) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_draw_pixel(int x0, int y0) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x0D; + + _cmd_buff[3] = CMD_DRAW_PIXEL; + + _cmd_buff[4] = (x0 >> 8) & 0xFF; + _cmd_buff[5] = x0 & 0xFF; + _cmd_buff[6] = (y0 >> 8) & 0xFF; + _cmd_buff[7] = y0 & 0xFF; + + _cmd_buff[8] = FRAME_E0; + _cmd_buff[9] = FRAME_E1; + _cmd_buff[10] = FRAME_E2; + _cmd_buff[11] = FRAME_E3; + _cmd_buff[12] = _verify(_cmd_buff, 12); + + _putchars(_cmd_buff, 13); +} +/******************************************************************************* +* Function Name : void epd_draw_line(int x0, int y0, int x1, int y1) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_draw_line(int x0, int y0, int x1, int y1) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x11; + + _cmd_buff[3] = CMD_DRAW_LINE; + + _cmd_buff[4] = (x0 >> 8) & 0xFF; + _cmd_buff[5] = x0 & 0xFF; + _cmd_buff[6] = (y0 >> 8) & 0xFF; + _cmd_buff[7] = y0 & 0xFF; + _cmd_buff[8] = (x1 >> 8) & 0xFF; + _cmd_buff[9] = x1 & 0xFF; + _cmd_buff[10] = (y1 >> 8) & 0xFF; + _cmd_buff[11] = y1 & 0xFF; + + _cmd_buff[12] = FRAME_E0; + _cmd_buff[13] = FRAME_E1; + _cmd_buff[14] = FRAME_E2; + _cmd_buff[15] = FRAME_E3; + _cmd_buff[16] = _verify(_cmd_buff, 16); + + _putchars(_cmd_buff, 17); +} +/******************************************************************************* +* Function Name : void epd_fill_rect(int x0, int y0, int x1, int y1) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_fill_rect(int x0, int y0, int x1, int y1) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x11; + + _cmd_buff[3] = CMD_FILL_RECT; + + _cmd_buff[4] = (x0 >> 8) & 0xFF; + _cmd_buff[5] = x0 & 0xFF; + _cmd_buff[6] = (y0 >> 8) & 0xFF; + _cmd_buff[7] = y0 & 0xFF; + _cmd_buff[8] = (x1 >> 8) & 0xFF; + _cmd_buff[9] = x1 & 0xFF; + _cmd_buff[10] = (y1 >> 8) & 0xFF; + _cmd_buff[11] = y1 & 0xFF; + + _cmd_buff[12] = FRAME_E0; + _cmd_buff[13] = FRAME_E1; + _cmd_buff[14] = FRAME_E2; + _cmd_buff[15] = FRAME_E3; + _cmd_buff[16] = _verify(_cmd_buff, 16); + + _putchars(_cmd_buff, 17); +} +/******************************************************************************* +* Function Name : void epd_draw_circle(int x0, int y0, int r) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_draw_circle(int x0, int y0, int r) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x0F; + + _cmd_buff[3] = CMD_DRAW_CIRCLE; + + _cmd_buff[4] = (x0 >> 8) & 0xFF; + _cmd_buff[5] = x0 & 0xFF; + _cmd_buff[6] = (y0 >> 8) & 0xFF; + _cmd_buff[7] = y0 & 0xFF; + _cmd_buff[8] = (r >> 8) & 0xFF; + _cmd_buff[9] = r & 0xFF; + + + _cmd_buff[10] = FRAME_E0; + _cmd_buff[11] = FRAME_E1; + _cmd_buff[12] = FRAME_E2; + _cmd_buff[13] = FRAME_E3; + _cmd_buff[14] = _verify(_cmd_buff, 14); + + _putchars(_cmd_buff, 15); +} +/******************************************************************************* +* Function Name : void epd_fill_circle(int x0, int y0, int r) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_fill_circle(int x0, int y0, int r) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x0F; + + _cmd_buff[3] = CMD_FILL_CIRCLE; + + _cmd_buff[4] = (x0 >> 8) & 0xFF; + _cmd_buff[5] = x0 & 0xFF; + _cmd_buff[6] = (y0 >> 8) & 0xFF; + _cmd_buff[7] = y0 & 0xFF; + _cmd_buff[8] = (r >> 8) & 0xFF; + _cmd_buff[9] = r & 0xFF; + + + _cmd_buff[10] = FRAME_E0; + _cmd_buff[11] = FRAME_E1; + _cmd_buff[12] = FRAME_E2; + _cmd_buff[13] = FRAME_E3; + _cmd_buff[14] = _verify(_cmd_buff, 14); + + _putchars(_cmd_buff, 15); +} +/******************************************************************************* +* Function Name : void epd_draw_triangle(int x0, int y0, int x1, int y1, int x2, int y2) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_draw_triangle(int x0, int y0, int x1, int y1, int x2, int y2) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x15; + + _cmd_buff[3] = CMD_DRAW_TRIANGLE; + + _cmd_buff[4] = (x0 >> 8) & 0xFF; + _cmd_buff[5] = x0 & 0xFF; + _cmd_buff[6] = (y0 >> 8) & 0xFF; + _cmd_buff[7] = y0 & 0xFF; + _cmd_buff[8] = (x1 >> 8) & 0xFF; + _cmd_buff[9] = x1 & 0xFF; + _cmd_buff[10] = (y1 >> 8) & 0xFF; + _cmd_buff[11] = y1 & 0xFF; + _cmd_buff[12] = (x2 >> 8) & 0xFF; + _cmd_buff[13] = x2 & 0xFF; + _cmd_buff[14] = (y2 >> 8) & 0xFF; + _cmd_buff[15] = y2 & 0xFF; + + _cmd_buff[16] = FRAME_E0; + _cmd_buff[17] = FRAME_E1; + _cmd_buff[18] = FRAME_E2; + _cmd_buff[19] = FRAME_E3; + _cmd_buff[20] = _verify(_cmd_buff, 20); + + _putchars(_cmd_buff, 21); +} +/******************************************************************************* +* Function Name : void epd_fill_triangle(int x0, int y0, int x1, int y1, int x2, int y2) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_fill_triangle(int x0, int y0, int x1, int y1, int x2, int y2) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x15; + + _cmd_buff[3] = CMD_FILL_TRIANGLE; + + _cmd_buff[4] = (x0 >> 8) & 0xFF; + _cmd_buff[5] = x0 & 0xFF; + _cmd_buff[6] = (y0 >> 8) & 0xFF; + _cmd_buff[7] = y0 & 0xFF; + _cmd_buff[8] = (x1 >> 8) & 0xFF; + _cmd_buff[9] = x1 & 0xFF; + _cmd_buff[10] = (y1 >> 8) & 0xFF; + _cmd_buff[11] = y1 & 0xFF; + _cmd_buff[12] = (x2 >> 8) & 0xFF; + _cmd_buff[13] = x2 & 0xFF; + _cmd_buff[14] = (y2 >> 8) & 0xFF; + _cmd_buff[15] = y2 & 0xFF; + + _cmd_buff[16] = FRAME_E0; + _cmd_buff[17] = FRAME_E1; + _cmd_buff[18] = FRAME_E2; + _cmd_buff[19] = FRAME_E3; + _cmd_buff[20] = _verify(_cmd_buff, 20); + + _putchars(_cmd_buff, 21); +} +/******************************************************************************* +* Function Name : void epd_clear(void) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_clear(void) +{ + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = 0x00; + _cmd_buff[2] = 0x09; + + _cmd_buff[3] = CMD_CLEAR; + + _cmd_buff[4] = FRAME_E0; + _cmd_buff[5] = FRAME_E1; + _cmd_buff[6] = FRAME_E2; + _cmd_buff[7] = FRAME_E3; + _cmd_buff[8] = _verify(_cmd_buff, 8); + + _putchars(_cmd_buff, 9); +} + +/******************************************************************************* +* Function Name : void epd_disp_char(unsigned char ch, int x0, int y0); +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_disp_char(unsigned char ch, int x0, int y0) +{ + unsigned char buff[2]; + + buff[0] = ch; + buff[1] = 0; + + epd_disp_string(buff, x0, y0); +} +/******************************************************************************* +* Function Name : void epd_disp_string(const void * p, int x0, int y0) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_disp_string(const void * p, int x0, int y0) +{ + int string_size; + unsigned char * ptr = (unsigned char *)p; + + + string_size = strlen((const char *)ptr); + string_size += 14; + + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = (string_size >> 8) & 0xFF; + _cmd_buff[2] = string_size & 0xFF; + + _cmd_buff[3] = CMD_DRAW_STRING; + + _cmd_buff[4] = (x0 >> 8) & 0xFF; + _cmd_buff[5] = x0 & 0xFF; + _cmd_buff[6] = (y0 >> 8) & 0xFF; + _cmd_buff[7] = y0 & 0xFF; + + strcpy((char *)(&_cmd_buff[8]), (const char *)ptr); + + string_size -= 5; + + _cmd_buff[string_size] = FRAME_E0; + _cmd_buff[string_size + 1] = FRAME_E1; + _cmd_buff[string_size + 2] = FRAME_E2; + _cmd_buff[string_size + 3] = FRAME_E3; + _cmd_buff[string_size + 4] = _verify(_cmd_buff, string_size + 4); + + _putchars(_cmd_buff, string_size + 5); +} +/******************************************************************************* +* Function Name : void epd_disp_bitmap(const void * p, int x0, int y0) +* Description : +* Input : +* Output : None +* Return : +* Attention : None +*******************************************************************************/ +void epd_disp_bitmap(const void * p, int x0, int y0) +{ + int string_size; + unsigned char * ptr = (unsigned char *)p; + + string_size = strlen((const char *)ptr); + string_size += 14; + + _cmd_buff[0] = FRAME_B; + + _cmd_buff[1] = (string_size >> 8) & 0xFF; + _cmd_buff[2] = string_size & 0xFF; + + _cmd_buff[3] = CMD_DRAW_BITMAP; + + _cmd_buff[4] = (x0 >> 8) & 0xFF; + _cmd_buff[5] = x0 & 0xFF; + _cmd_buff[6] = (y0 >> 8) & 0xFF; + _cmd_buff[7] = y0 & 0xFF; + + strcpy((char *)(&_cmd_buff[8]), (const char *)ptr); + + string_size -= 5; + + _cmd_buff[string_size] = FRAME_E0; + _cmd_buff[string_size + 1] = FRAME_E1; + _cmd_buff[string_size + 2] = FRAME_E2; + _cmd_buff[string_size + 3] = FRAME_E3; + _cmd_buff[string_size + 4] = _verify(_cmd_buff, string_size + 4); + + _putchars(_cmd_buff, string_size + 5); +} diff --git a/epd.h b/epd.h new file mode 100644 index 0000000..b36eca7 --- /dev/null +++ b/epd.h @@ -0,0 +1,156 @@ +/********************************************************************************************************* +* +* File : epd.h +* Hardware Environment: +* Build Environment : RealView MDK-ARM Version: 4.74 +* Version : V1.0 +* By : V +* +* (c) Copyright 2005-2015, WaveShare +* http://www.waveshare.net +* All Rights Reserved +* +*********************************************************************************************************/ +#ifndef EPD_H + #define EPD_H + + +#define CMD_SIZE 512 + +/* +frame format +*/ +#define FRAME_B 0xA5 +#define FRAME_E0 0xCC +#define FRAME_E1 0x33 +#define FRAME_E2 0xC3 +#define FRAME_E3 0x3C + + +/* +color define +*/ +#define WHITE 0x03 +#define GRAY 0x02 +#define DARK_GRAY 0x01 +#define BLACK 0x00 + +/* +command define +*/ +#define CMD_HANDSHAKE 0x00 //handshake +#define CMD_SET_BAUD 0x01 //set baud +#define CMD_READ_BAUD 0x02 //read baud +#define CMD_MEMORYMODE 0x07 //set memory mode +#define CMD_STOPMODE 0x08 //enter stop mode +#define CMD_UPDATE 0x0A //update +#define CMD_SCREEN_ROTATION 0x0D //set screen rotation +#define CMD_LOAD_FONT 0x0E //load font +#define CMD_LOAD_PIC 0x0F //load picture + +#define CMD_SET_COLOR 0x10 //set color +#define CMD_SET_EN_FONT 0x1E //set english font +#define CMD_SET_CH_FONT 0x1F //set chinese font + +#define CMD_DRAW_PIXEL 0x20 //set pixel +#define CMD_DRAW_LINE 0x22 //draw line +#define CMD_FILL_RECT 0x24 //fill rectangle +#define CMD_DRAW_CIRCLE 0x26 //draw circle +#define CMD_FILL_CIRCLE 0x27 //fill circle +#define CMD_DRAW_TRIANGLE 0x28 //draw triangle +#define CMD_FILL_TRIANGLE 0x29 //fill triangle +#define CMD_CLEAR 0x2E //clear screen use back color + +#define CMD_DRAW_STRING 0x30 //draw string + +#define CMD_DRAW_BITMAP 0x70 //draw bitmap + + +/* +FONT +*/ +#define GBK32 0x01 +#define GBK48 0x02 +#define GBK64 0x03 + +#define ASCII32 0x01 +#define ASCII48 0x02 +#define ASCII64 0x03 + + + +/* +Memory Mode +*/ +#define MEM_NAND 0 +#define MEM_TF 1 + +/* +set screen rotation +*/ +#define EPD_NORMAL 0 //screen normal +#define EPD_INVERSION 1 //screen inversion + + +void epd_init(void); +void epd_reset(void); +void epd_wakeup(void); + +void epd_handshake(void); +void epd_set_memory(unsigned char mode); +void epd_enter_stopmode(void); +void epd_update(void); +void epd_screen_rotation(unsigned char mode); +void epd_load_font(void); +void epd_load_pic(void); + + +void epd_set_color(unsigned char color, unsigned char bkcolor); +void epd_set_en_font(unsigned char font); +void epd_set_ch_font(unsigned char font); + +void epd_draw_pixel(int x0, int y0); +void epd_draw_line(int x0, int y0, int x1, int y1); +void epd_fill_rect(int x0, int y0, int x1, int y1); +void epd_draw_circle(int x0, int y0, int r); +void epd_fill_circle(int x0, int y0, int r); +void epd_draw_triangle(int x0, int y0, int x1, int y1, int x2, int y2); +void epd_fill_triangle(int x0, int y0, int x1, int y1, int x2, int y2); +void epd_clear(void); + +void epd_disp_char(unsigned char ch, int x0, int y0); +void epd_disp_string(const void * p, int x0, int y0); + +void epd_disp_bitmap(const void * p, int x0, int y0); + + + +#endif + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/esp_time.ino b/esp_time.ino new file mode 100644 index 0000000..4ec3709 --- /dev/null +++ b/esp_time.ino @@ -0,0 +1,279 @@ +/* + * Copyright Paul Warren 2019 + * + * Released under the terms of the GPLv3 license. + */ +#include +#include +#include +#include +#include + +#include "epd.h" +#include "credential.h" + +// Weather bits + +// Australian BOM bits, Belconnen is mine. +// see http://www.bom.gov.au/catalogue/data-feeds.shtml +//const char* aac = "NSW_PT254"; +//const char* bom_url = "ftp://ftp.bom.gov.au/anon/gen/fwo/IDN11060.xml"; + +// openweathermap, api_key from credential.h +// +// Maybe try String types? +const String owm_url = "http://api.openweathermap.org/data/2.5/weather?q=Belconnen,AU&APPID="; + + +// Timezone bits + +// Australia Eastern Time Zone (Sydney, Melbourne) +TimeChangeRule aEDT = {"AEDT", First, Sun, Oct, 2, 660}; // UTC + 11 hours +TimeChangeRule aEST = {"AEST", First, Sun, Apr, 3, 600}; // UTC + 10 hours +Timezone ausET(aEDT, aEST); +TimeChangeRule *tcr; + +// Network clients +WiFiUDP ntpUDP; + +HTTPClient http; + +NTPClient timeClient(ntpUDP, "raspberrypi.lan", 0, 60000); //use internal ntp server, update every 10 minutes + + +// defined in "credentials.h" +const char* ssid = ssid_name; // The SSID (name) of your Wi-Fi network +const char* password = ssid_pass; // The password of the Wi-Fi network + +const int led = LED_BUILTIN; + +// yes this seems backwards but it works... +void ledOn(void) { digitalWrite(led, LOW);} +void ledOff(void) { digitalWrite(led, HIGH);} +void wait(void) { delay(1500);} + +// Font width +int dwidth = 185; + +void setup() { + pinMode(led, OUTPUT); + ledOff(); + + wifi_set_sleep_type(LIGHT_SLEEP_T); + + epd_init(); + epd_wakeup(); + epd_set_memory(MEM_NAND); + epd_set_color(BLACK, WHITE); + epd_set_en_font(ASCII64); + epd_clear(); + + Serial.begin(115200); // Start serial communication + Serial.setTimeout(2000); + while (!Serial) { } + Serial.println("\r\n\r\nSTARTING\r\n"); + + wifi(); + printDateTime(0); + timeClient.begin(); + ntpUpdate(); + epd_clear(); + printDateTime(1); + ledOff(); +} + +void wifi() { + WiFi.persistent(false); + WiFi.mode(WIFI_OFF); + WiFi.mode(WIFI_STA); + WiFi.begin(ssid, password); // Access WiFi + + Serial.print("Connecting to "); + Serial.print(ssid); + Serial.print(" ..."); + + while (WiFi.status() != WL_CONNECTED) { // Wait for WiFi to connect + delay(250); + Serial.print("."); + } + + Serial.println('\n'); + Serial.println("WiFi connection established"); + Serial.print("Device's IP address is "); + Serial.println(WiFi.localIP()); // Show device's IP address +} + +void ntpUpdate() { + timeClient.update(); + setTime(timeClient.getEpochTime()); +} + + +void disp_digit(int digit, int xpos){ + // digit: digit to display + // xpos: X digit position, indexed at 1 + + int dpos = 0; + int ypos = 0; + dpos = ((xpos - 1) * dwidth); + if (xpos > 2) { + dpos += 60; // account for colon + } + switch (digit) { + case 0: + epd_disp_bitmap("0.JPG", dpos, ypos); + break; + case 1: + epd_disp_bitmap("1.JPG", dpos, ypos); + break; + case 2: + epd_disp_bitmap("2.JPG", dpos, ypos); + break; + case 3: + epd_disp_bitmap("3.JPG", dpos, ypos); + break; + case 4: + epd_disp_bitmap("4.JPG", dpos, ypos); + break; + case 5: + epd_disp_bitmap("5.JPG", dpos, ypos); + break; + case 6: + epd_disp_bitmap("6.JPG", dpos, ypos); + break; + case 7: + epd_disp_bitmap("7.JPG", dpos, ypos); + break; + case 8: + epd_disp_bitmap("8.JPG", dpos, ypos); + break; + case 9: + epd_disp_bitmap("9.JPG", dpos, ypos); + break; + } +} + +void disp_time(int hours, int minutes) { + + epd_clear(); + + // first digit of hours + if (hours > 19) { + disp_digit(2, 1); + hours -= 20; + } else if (hours > 9) { + disp_digit(1, 1); + hours -= 10; + } else { + disp_digit(0, 1); + } + + // second hours digit + disp_digit(hours, 2); + + epd_disp_bitmap("COLO.JPG", 2 * dwidth, 0); + + // first minutes digit + if (minutes > 49) { + disp_digit(5, 3); + minutes -= 50; + } else if (minutes > 39) { + disp_digit(4, 3); + minutes -= 40; + } else if (minutes > 29) { + disp_digit(3, 3); + minutes -= 30; + } else if (minutes > 19) { + disp_digit(2, 3); + minutes -= 20; + } else if (minutes > 9) { + disp_digit(1, 3); + minutes -= 10; + } else { + disp_digit(0, 3); + } + + // second minutes digit + disp_digit(minutes, 4); + +} + + +void printDateTime(int update_epd) +{ + char buf[64]; + + time_t t; + + t = ausET.toLocal(now(), &tcr); + + char m[4]; // temporary storage for month string (DateStrings.cpp uses shared buffer) + strcpy(m, monthShortStr(month(t))); + + sprintf(buf, "%.2d:%.2d:%.2d", hour(t), minute(t), second(t)); + Serial.print(buf); Serial.print(" "); + + if (update_epd > 0) { + disp_time(hour(t), minute(t)); + } + + sprintf(buf, "%s %.2d %s %d %s", dayShortStr(weekday(t)), day(t), m, year(t), &tcr -> abbrev); + Serial.println(buf); + + if (update_epd > 0) { + epd_set_en_font(ASCII64); + epd_disp_string(buf, 150, 290); + epd_update(); + delay(1500); + Serial.println("Screen Updated"); + } +} + +void weatherUpdate(void) { + + http.begin(owm_url + api_key); + int httpCode = http.GET(); + + if (httpCode > 0) { + + String payload = http.getString(); + Serial.println(httpCode); + Serial.println(payload); + } else { + Serial.print("Error on HTTP Request: "); + Serial.println(httpCode); + + http.end(); + } +} + +void loop() { + int sleep_seconds = 0; + + Serial.println("Back from sleep!"); + + if (WiFi.status() != WL_CONNECTED) { + wifi(); + } + + ntpUpdate(); + //weatherUpdate(); + + if (second(now()) >= 49) { + epd_wakeup(); + while (second(now()) != 0) { + delay(500); + } + printDateTime(1); + delay(4000); + epd_enter_stopmode(); + } + + + sleep_seconds = 49 - second(now()); + Serial.print("Sleeping for: "); + Serial.println(sleep_seconds); + + delay(sleep_seconds * 1000); + +} diff --git a/images/0.jpg b/images/0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f92134edf3445a1279eb060f98762c2b12b0e96 GIT binary patch literal 4624 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 literal 0 HcmV?d00001 diff --git a/images/1.jpg b/images/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4e85d6863a5db945d83315ec6b3354b6d2125ea GIT binary patch literal 3343 zcmeH}c~nz(7RP@t3kkbOP(UEE8XS}oHkBnHOF-&j87<2wlwCx{g+OErpn@<;D%w!7 zl||XABb!tK5tLMl=m=T_lYxY-4Jb{*l7v9=8rnJSY0v0s`{x|*JKy)uz30C7`Q7{b z-5)#*bHSQj-oD-df&hRN4}jUg17MYuFiL1F27^&n#;T~{)YVi~)%4bCYvK&`@kWOF z1_m3=wr<*JVr6PzKyb9Q`oPA{&JMq6yURAB^Hy6s;%X8|Sy@?4RZUl2U6*KVU`+he z26q81EZ~AxBxC{*S`bnTf|&rX_)j$SlY##lgg~OuN*JuNimD=@Weq?;NF)M(=Y)>6=?@B3N#= zvv+XZwta_(rV}5<)1AmEWUW@ zQ%1>WmrEI5GWK9g<0i-5UC0wwNPkd8>O}Gftbi+ z+9t#tENov7mjD(lSb#>|DQXg`ttF|gdfMD`2VuUsskhJ+NwLuvsM z5K9S_*($%$mqTJv>HgE=p&>0ctLw}Z!y~&q0HV*h{`{Mq)2q0Q64jgvsSE{2H!GrQ=TNA#3h6eRCA20<8J7cJ0di z`dg-VT5?qTtnwkZ`ipYQjG%Vm;8Jrl@gKaSu2H82ai$WERD%=d`c}_;DcHPNO{Znn zM9i!c{aeJq)}L_na(klVo#|^zudg~n)$S@SquV#e##H|;L@*S5s5K;5+W5vv2H7uQ znEq0H zb{Pf}Y-T5)O|v8*M|qWnfbdq`h~TgiQnWb{`^ZU&i1mz64MdI`S|+P5iF8?9WTuE3 zj8DdX!X@a;(cWGv^4ndCDxxXjD1k-I#M48ep_YX&o$UwNTR+l~-%Qtlf!l7Qcla_h z$I4du2aKQJu0;iq`xNv?-t@GRWRYFv$Zl7?7tZFD9#she*m61}y3c3i75z9(+MToS z*`u;0vo!v40}ObQ*B!T1C;V56T~cMkw1tdhNI09Ryle}Do;w9J&R6oF;AfOS*EbQ{ zv7Or$2-@BQi|`=)Q#Yn9BgDyr?ko@>BPswFo+HKysS=Vp(HQE zwwmhanZN6Kxt2TLs)uo*{gMv_1t)x>+WXnlY<{9FMomo#{ zAe5Ac| zAX{C)qW%02Ha!MWNNoOrwuQYT!BH+fMS3fPH0M%cr@{NlH4hr(G$*`4+Kwgw$M11C?nNp_%7~_XWw+vVKLCTgB4NG^nM_(1I>NxP z9$%U5a!Ri6^a#J8-VXylle3aSmmJ{h()t}eV9=>e6S9QT|B>ooVg!rK>?L05!22+) z<{GUoG_LsFnXA{U%ywl7NawAbDPvQEhXTi9Pv8XG`#ibGb7I|%r}&a!zi{7W5;YA5 z-U7`Q&T2&wa(OgKDUa}f7gf_D$j>_z7y2(} Yr|ay;HOAvj=XJA;6XSlp)xfWQ1QMOzjQ{`u literal 0 HcmV?d00001 diff --git a/images/2.jpg b/images/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88e4f975ad33033dea0cf5793da9cc0c2d2b1242 GIT binary patch literal 4798 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 literal 0 HcmV?d00001 diff --git a/images/4.jpg b/images/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a80150ed9a6229a3c27a05259f80ea6b668f0777 GIT binary patch literal 4001 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 literal 0 HcmV?d00001 diff --git a/images/5.jpg b/images/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8bae2ff3181b51d5edddaa379d2396c6694e166f GIT binary patch literal 4191 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%0Det*{!JJ^j-Mtq% zv}Q&-0?PCr&1Clz1Qjf`ki#g24?|a*S+{D1jHb<~cPv>Vo?Cr7+N&}=X`|~y>J1(( z_01-sH^X`W0j0S~laO+VHs|zdv$r@`cL_hOLR2a}@gy+HK1Ru>vGV7>h8&k;PdU-T zrH3W<8J%|(Y>~~JRsz!pXYI6j3?sI;ZMNT|JRjq3Q56lPdm;c;VzM@Pp{IJOMGZLM z=KI>(uKZGnc$3tBb{<~&9DZ`~$N2INiGC}@UL?#aa+bQiw|Gb254$-*o%h;=t(cA~ zTq}bfk9%1b1$2C)NcGObCfbwJP)gWm(err}{rg$t4NG^Ty)cegnQT+X{JwZ!1w7nj z3)^3gw;s0U(8{nUKTM>_`}B3z@#okdG#Sflz-85b8><`CnaNCW^eriX0=ekM_6e%$ zIvVl$y|bA!9n&`L?TMx{dPeS|8U-yqdpB=o8KdDZhAmO^mOkkn`fzA@6V%+ N%J%*Dbc2wte*u0zE1v)W literal 0 HcmV?d00001 diff --git a/images/8.jpg b/images/8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f7fc7a0771921532c273d5bc4ee2392cb9e4764c GIT binary patch literal 5529 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 N0McasH$g~K{{_wY)~)~m literal 0 HcmV?d00001 diff --git a/images/COLO.jpg b/images/COLO.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22eef91e34288976b390bbe50d38e7132d59e3d3 GIT binary patch literal 1922 zcmbu9dr*^C8i&6x7rq1%AOw|55+EQ6igK600;!@1D4ife1g%*`M6m7FR1lCPT#F(# z4N?`@0?I`&C<}&*6j3CSAj1k$B(REv$W_HeK_W!5!FIYc`&W1SJM)}>&O2w`XU;_{ z(~beg!2v-500;sAs2hOxUw}V=($jk?CDq9xgBO_p!L_TGc&hXZ%?5*Y;gD3;z{%J z_TRoEU}s=ZaM<4P2rOSmy zSIa9ZtFBeoTyMA~YHVt5x!rodQ~aPyBJFH~%X3UtTz!7Yu=bBcN3;5Ozuj9EU*KxagT|4TTP!z>{6mQKs7j zSL!>^wr+crYYwyf_1D_D%h#(`)jpa1F|myQ%j|ct|9Fi67&xdqJU9-Z1B*-4t7-aw ziaNCVfr_gLX)W&bvut@g7dFv$$NyabZ>osYJA3*hVIG)&gVStR)@2hO2;-HKZ|D=F zKHZdYVLqL}T<7$9-I(m@_2HMU{5R{{lIVZWXg_!=j`)-8R(+2fA)gbnCC%@8!^biW zKEXQZuIN?Air4FO_=@@{y)uP#Zk%W`S=+_z8Bw>xVkqusX*mP`GF;UhWoOpJ0${Dr;zK&_{nK~PtcgN?zXzSnyK^ z)UnXEQJaCo=lr6dZ5Q(QDAp`;0LGK~YL937S|IrLxTTb|*0%boi(t-ssB`2AKe_BU zGbLOT@E2hu=4;;*eSAg$%I~{&Wu1?@Sb4KY(j-jydM571w&KGrwi5zgi+YNbQ@uFz znUzid{t~j1dsn`zDl>9`(llk@aG*;I%(aZIB;aw_Ys%$aaqqc~9InXJY zoz14p!g@*vM$?=$M#_RwYt>VWJVEI{;v6^Iv1zWn9uLxo5AEkzkrAHR8kedhfB&4I z$5)0CskfS)HkRC!+@^m#bniwHK)sp^d?~2t7qQ8$&K(ivkg_&1b&WjoY1^oIe?|0Q z$$c^}{Ki8nd_zws$!g$;$-e27nA*(pt#KAOb$XO2RM+1hAsibUHIV9C*;5nWd}3r| zyI&k(@f9!|G*9S5E^VCRN4(z>4;95&3F6|G@ zS={qaf>AFP;3V%z{V_(RkTf;u6*C&!LN)jiYiLES&x=}cLTb2=6KWLoDrD;n^Yg?T z_uHq6+;p_K9!fCsKa%W zr7tV@yX>NRWA8q%PrK8e}ANY>1s%2 zm^`Tkvgms+OJVBd`o(b?Xe4pT_?^i#{c_>-68BD3$hG*3f@e{? zomEoW()qFTV)ljwQ}Er;SuGH2nO!)g?5eR8f4-w}F8q>=hOiPF)!Zbr(w`egvxQgf z%9p#74UHzphK33lPDoXN5)@eC5tq{oI{bFPW8g_}>%0LPh`p literal 0 HcmV?d00001 diff --git a/images/build.sh b/images/build.sh new file mode 100755 index 0000000..0fc6bfd --- /dev/null +++ b/images/build.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +opt=$1 +case $opt in + -u) ~/bin/arduino --upload -v --port /dev/ttyUSB0 --board esp8266:esp8266:d1_mini images.ino + ;; + *) ~/bin/arduino --verify -v --board esp8266:esp8266:d1_mini images.ino + ;; +esac + + + + + + diff --git a/images/create_images.py b/images/create_images.py new file mode 100644 index 0000000..da47525 --- /dev/null +++ b/images/create_images.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +from PIL import Image, ImageDraw, ImageFont + +fnt = ImageFont.truetype('/Library/Fonts/FreeMono.ttf', 336) + + +for I in ("1", "2", "3", "4", "5", "6", "7", "8", "9", "0"): + img = Image.new('RGB', (185, 224), color = (255, 255, 255)) + d = ImageDraw.Draw(img) + d.text((0,-60), I, font=fnt, fill=(0,0,0)) + img.save("%s.jpg" % (I)) + + +img = Image.new('RGB', (60,224), color = (255, 255, 255)) +d = ImageDraw.Draw(img) +d.text((-70,-60), ":", font=fnt, fill=(0,0,0)) +# the -70 offset gets the : in the right spot for a 60 pixel wide image. Could proabably reduce the font size a bit +img.save("COLO.jpg"); diff --git a/images/images.ino b/images/images.ino new file mode 100644 index 0000000..de0afee --- /dev/null +++ b/images/images.ino @@ -0,0 +1,52 @@ +/* + * Copyright Paul Warren 2019 + * + * Released under the terms of the GPLv3 license. + */ +#include "epd.h" + +const int led = LED_BUILTIN; + +// Font width +int dwidth = 185; + +void ledOn(void) { digitalWrite(led, HIGH);} +void ledOff(void) { digitalWrite(led, LOW);} +void wait(void) { delay(1500);} + + +void setup() { + Serial.begin(115200); // Start serial communication + Serial.setTimeout(2000); + while (!Serial) { } + Serial.println("\r\n\r\nSTARTING\r\n"); + + epd_init(); + epd_wakeup(); + delay(1500); + epd_set_memory(MEM_TF); + epd_load_pic(); + epd_set_memory(MEM_NAND); + delay(1500); + epd_clear(); + +} + +void loop() { + int flag = 0; + + delay(1500); + Serial.println("Files uploaded"); + Serial.println("Please wait till screen LED goes flashes again"); + + while (1) { + if(flag) { + flag = 0; + ledOff(); + } else { + flag = 1; + ledOn(); + } + delay(1000); + } +} diff --git a/images/old/0.jpg b/images/old/0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cba40c8570d514da3f231916de320861d977a887 GIT binary patch literal 5007 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 tgbt+P0Y<|h+1KN#U&*6 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 GFMk6&O&gQ| literal 0 HcmV?d00001 diff --git a/images/old/3.jpg b/images/old/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bbd1b8f4fc9db77f004d5fb7ddd24fc8fd5d2dce GIT binary patch literal 4962 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 literal 0 HcmV?d00001 diff --git a/images/old/7.jpg b/images/old/7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67520758214255e070565b4b2b525cc80410628e GIT binary patch literal 3554 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 literal 0 HcmV?d00001 diff --git a/images/old/9.jpg b/images/old/9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03add6492182490fc6b5fcb7beb3d28872d9f55d GIT binary patch literal 5473 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 literal 0 HcmV?d00001 diff --git a/images/old/COLO.jpg b/images/old/COLO.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4ea04758425ee91a4e9f48d99e08f1931b132de GIT binary patch literal 2052 zcmc)KX;72b8VB(A<;@B~wge;%#)Pm~K!hNRgM?rs#Ma7kF+wSz!HQU*tg-|GCaEg-UVY7t%X#L^`OP_V zHePH@1G)$HGxq}^2mqjZ02?oXeE>L~%h!!q;o$XzBQXT9!Hv!RTG)4=vRa<+jJ&8cFfA898 z2lP;&H{c3^WI#g?g!I4-AwX206Ar#B;I9HTAQ&8hM4>gc)D6wLfCdOb8ZZbBhr!g{ zY3g+VrU%z2+0hXOK1Y${7_5Ef#Y&W^M|}s*cUVfH9*fOFYZ@ADHO8BnTUhS+&|$Zu zle5d7eIGIQdwMYs`2EBGFzZM_AUo{%7bn6`M#RM@B%V%6PC0WnJBOE>cdoeP($}Sz zuauSFs=9sWo9dd{x`xK4=KBvGK6>2QCG76$?R)a$GttQNpT#dm$0ReeujXFQFDx#} zmVaN7zf~yzxw`2B0q9Sbdj1pkA1*z$O9KXjV8~4usBu~yNDl@l*&+1lKFFgn24wq8 z6xQQnWqk+QlOV`V>wO7o&ZhFLu&LNwV=w!iqmcS@)Mk z7jjM{&lVaC)&@~+8j4Gc41_)>GUa=ja+M|2Afxqe0N4nTYs#*CuciT`V|iw#6IVjh zfwY4$`YO8Y(m+6~KR=86D3x5;rx!Gb1)q;{K9Mz_&GOaw97U9&1C_JIju?J*B`g7F!;wg# z-ng-)DQWK1CxOpiQAZ7FOSd62&qho|jY3eh0P&O^sb;*+3+YGlFvAqr6xVaS6?O=L zHO4iFFWcRgGxqEG4+H%oU*9U=v&rtrM=wJRy+H={T@ZpC+b~fp>vpivE6J8r#2)QV zdmf^zG+>ql$tLrvd+xOM_w~;<>=>VydLK;t-W|@VlyN23d(S46B}DE)L~6eA_|ZG& z%U8=67O09tl94!h8Y3=JEh!c6>UGesWfd?md>wE4k|i`9Xth{jkUoevze62gU@b33 z^_n9?9Ie-4jk(m7d*&gdZQb-fp8xRmRHI^lTG9C-WPxwSkqnR`1q3G>{b0;V|baG0RQKKpb zzmq+3uWA&w#VwrdTHMv>L`Wq1BI}140M_Sy6HJ$#n%MwU8ng5Rn`jU(v` zb`!Dz9q9c09Uvv~uHYmdqY?R;UsJC6slT6E%2t-&btfJV-~>r=sw`&?GlHKwP>51ZxZmrXe67_V z|M30|7fH<5#TFR;-rQ+%d-IU;P|vF3jBWS8#gv8YMw`as;RAb(xizm+hLA5uSXR@v zCMPFdhZuicS-y9SwDWF2!%&;t?}cJD%c|}srV#tf$C5#2T>xGM*X6?zeNHtnZdj_1v77Y-^dDcjh^-{9ZM<7()E}K_OG6 zslsQ<=o#~CuAMf~;{oG4lSl*Db?v5kkz4ay9EVuR+p}Iy9xQuXbAMKx)SV`AHx4!% zu96w$B-m{8zy^QTN-vbw6RpybNU4Aq&5w%jU(5fXuiWZtGJXd;s;+(d+}dPo$&9#@ zG_yQ5nQNLK$Piw%8++g$Ki`Yu9ojxkW2A$!5EkO=ZDW@1yJs9(9GG&Nv(F=JxL!aAWje95rNC literal 0 HcmV?d00001